특정 사용자의 이메일 주소를 사용하여 forgot_password 엔드포인트를 하루에 여러 번 호출하는 스크립트나 누군가의 공격을 받고 있습니다. 이 현상은 며칠째 지속되고 있으며, 이메일이 발송되므로 시스템에 대한 악용으로도 볼 수 있습니다.
nginx access.log를 통해 해당 시간대의 IP 주소를 추적한 결과, 시스템의 다른 사용자로 확인되어 경고 메시지를 전송했지만, 이로써 해결될지는 의문입니다. 또한 해당 IP 주소를 Admin > Logs > Screened IPs에 추가했지만, 이것이 임시 로그인 차단 외에 어떤 효과를 가져올지 확실하지 않습니다. IP 주소는 변경될 수 있으며, 실제로도 변경되었고, 동적 주소일 가능성이 높지만, VPN을 켜서 다시 시작할 수도 있습니다.
admin/users/list/active 경로로 이동하여 문제를 일으킨 사용자의 이름을 클릭하면 해당 사용자를 정지할 수 있습니다. 정보 페이지에 도달하면 Permissions(권한) 섹션으로 스크롤하여 Suspend(정지)를 클릭하세요. 정지 조치가 적용되기까지 로그아웃이 필요할 수 있으므로 사용자가 로그아웃 상태인지 확인하세요. 만약 여전히 로그인되어 있다면, 같은 페이지 오른쪽 상단에 있는 파란색 상자를 클릭하여 직접 로그아웃 처리할 수 있습니다. 로그아웃된 후에는 이전 인증 정보로는 다시 로그인할 수 없습니다.
신규 계정을 승인하는 방식을 사용하신다면 — 그리고 '범인’이 계속 문제를 일으킨다면(그리고 누가 그런지 확실하다면) — 해당 사용자는 당신이 계정을 승인할 때까지 기다려야 합니다. 이미 그가 사용한 IP 주소(들)를 가지고 있으므로, 그 IP로 새로운 사용자가 나타나는 경우 어떻게 해야 하는지 아실 겁니다.
또한 사용자의 설정 페이지를 방문하여 Account(계정) 섹션에서 최근 사용된 장치를 확인할 수 있으며, 여기에는 로그인에 사용된 IP 주소도 표시됩니다. 이를 통해 추가적으로 모니터링할 IP 주소를 파악할 수 있습니다.
이때 계정 승인 제도가 유용하게 작용합니다.
이 사람이 어떻게 다른 사용자의 프로필에 접근하여 비밀번호 재설정을 요청하는 것일까요? 그것이 중요한 질문입니다.
분명히 이 검색으로는 합법적인 요청을 걸러낼 수 없습니다. 오늘과 어제의 로그를 수동으로 검토해 보니 몇 건의 합법적인 요청(반복되는 IP 주소가 아닌 것)을 발견했습니다. 대부분은 며칠마다 바뀌는 동일한 IP 주소에서 발생하고 있습니다. 시스템에는 큰 부담은 되지 않지만, 수신하는 사용자에게는 부담이 됩니다. 제가 할 수 있는 유일한 일은 nginx를 설정하여 IP 주소를 거부하는 것인데, IP가 계속 바뀌니… 아마 1~2주 동안 수동으로 확인하고 업데이트하면 그 사람이 시도를 멈출 수도 있지만, 아마도 잠시뿐일 것입니다. 피해자는 처음에 이런 일이 발생한 것이 약 1년 6개월 전이라고 말합니다.
누군가가 내 대신 "비밀번호 찾기"를 반복적으로 트리거하게 되면 분명히 짜증나는 일이죠 .. 하지만 이걸 근거로 사용자의 비밀번호 재설정 기능을 차단할 수는 없습니다. 비밀번호 재설정 기능을 차단하는 것 역시 일종의 괴롭힘(griefing)에 해당하기 때문이죠.
현재 분당 여러 번 수준으로 속도 제한(rate limit)이 설정되어 있다고 생각하는데, @riking 이 코드 경로를 검토해 주셔서 해당 기능이 여전히 정상 작동하는지 확인해 주시겠어요? 한도를 높일 수는 있지만, 그렇게 하더라도 “하루 몇 번” 수준의 악용을 안전하게 막을 수는 없습니다.
또한 관리자 > 로그 > 차단된 IP(Admin, Logs, Screened IPs)를 통해 IP 주소를 차단하면 해당 IP 주소가 비밀번호 재설정 요청을 보내는 것을 막을 수 있을 것으로 생각되는데, 이 부분도 @riking 이 정상 작동하는지 확인해 주시면 좋겠습니다.
2FA와 리셋 키를 사용 중인데도 비밀번호 재설정 시 이메일을 보내지 않도록 하는 옵션이 없습니다.
방문한 일부 웹사이트에서는 비밀번호 재설정을 요청하기 전에 이메일로 전송될 것이라고 명시하며 IP 주소를 표시합니다.
이 모든 것은 매우 사소한 귀찮음일 뿐입니다. 저는 이 이메일을 거의 확인하지 않으니까요. 모든 이메일은 필터링되어 "메시지를 읽음으로 표시"하도록 설정되어 있어 읽어야 할 메일이 있는 것처럼 보이지 않습니다. 1월에 이 필터를 설정해 두고 오늘 해당 폴더(Gmail의 레이블)를 확인해 보았습니다.
다른 접근 방식으로는 토큰 간 3시간과 같은 시간 제한을 비밀번호 재설정 이메일에 적용하는 것입니다.
쿨다운 기간 전에 비밀번호 재설정 이메일을 요청한 경우, 간단한 메시지를 표시할 수 있습니다:
“이미 비밀번호 재설정 이메일을 보냈습니다. 받은 편지함을 확인해 주세요. 2시간 이내에 이메일이 도착하지 않으면 %contact_email%로 사이트 관리자에게 도움을 요청해 주세요.”
포럼의 이메일 주소를 'email+something@gmail.com’으로 변경하고, 다른 브라우저에서 시크릿 모드(Incognito)로 테스트해 보았습니다. 여전히 통과되었습니다. 아마도 요청이 항상 실제 이메일 주소가 아닌 단순히 발신자 이름(from username)으로만 이루어지기 때문일 것입니다.
현재는 Dan이 해당 개인에게 사적으로 문제를 해결했거나 다른 수단을 통해 조치를 취했기 때문에 모든 가짜 요청이 중단되었습니다.
사용자 수준에서 활성화할 수 있는 보안 질문 옵션이 있다면, 트롤은 답을 알 수 없으므로 모든 요청을 줄이는 데 큰 도움이 될 것입니다. “가장 좋아하는 영화는 무엇인가요?” 또는 “가장 좋아하는 식당은 어디인가요?” 같은 질문 말이죠.
이 문제를 해결하기 위해 신속하게 답변해 주신 모든 분들께 감사드립니다. 안타깝게도 이것은 첫 번째 문제였으며, hopefully 마지막이 되기를 바랍니다.
답변해 주셔서 감사합니다. 위 방법이 현재 가장 직접적인 해결책인 것 같아 잘 작동하기를 바랍니다. 다만, 스팸이 줄어든 이후로 직접 테스트해 보지는 않았습니다. (공격자로 추정되는 사용자는 자신의 WiFi에서 게스트 네트워크를 꺼두었다고 주장하지만, 그것이 실제 원인이었는지 확신할 수 없습니다.)
수천 명의 활성 사용자가 있는 상황에서 (아직 Discourse로의 마이그레이션 과정에 있습니다) 여러분의 고충을 잘 이해합니다. 사람들이 어떤 이메일을 사용했는지 잊어버리는 등의 문제가 너무 자주 발생해서, 이는 수년간 우리의 가장 빈번한 지원 요청 중 하나였습니다. 정말 놀라운 일입니다.