감염된 웹사이트 1만 5000곳을 알아냈는데, 어떻게 알려야 할까요?

We know 15k websites are infected. how do we tell them?

scotthelme.co.uk ▲ 171 댓글 142 speckx

요약

악성 코드에 감염된 웹사이트 1만 5579곳을 찾았지만, 운영자에게 알릴 방법이 마땅치 않습니다.

웹 보안 연구자 스콧 헬름이 Report URI의 위협 정보 분석 결과를 공개하며 도움을 청했습니다. 감염 사이트를 찾는 속도는 빨라졌지만, 운영자에게 알리는 책임 있는 공개(취약점을 당사자에게 먼저 알리는 관행)는 따라가지 못한다고 했습니다.

왜 중요한가

  • 이 사이트들의 방문은 보수적으로 잡아도 매달 1억 3500만 건이 넘습니다. 그만큼 많은 방문자가 카드 정보 탈취와 악성 코드 설치에 노출돼 있습니다.
  • 감염을 찾는 일은 자동화됐지만 피해 운영자에게 닿는 경로는 거의 없다는 빈틈이 드러났습니다.

핵심 내용

  • 감염 사이트는 결제 정보 탈취(Magecart), 가짜 사람 확인 절차로 악성 코드를 깔게 하는 ClickFix, 피싱 페이지 이동 등에 쓰이고 있습니다.
  • 감염 경로는 워드프레스 취약점을 통한 직접 변조, 외부 스크립트 감염, 만료 도메인을 사들이는 DeadTag 수법 등입니다.
  • security.txt(보안 연락처를 적는 표준 파일)는 보급률이 낮고, WHOIS(도메인 등록 정보)는 GDPR 이후 연락처를 거의 보여 주지 않습니다.
  • 피해자를 망신 주고 공격자에게 표적을 넘길 수 있어 목록은 공개하지 않는다고 했습니다.
  • 유럽 등 각국 CERT(침해사고 대응팀)에 지역별 감염 목록을 주겠다며 연락을 요청했습니다.

HN 반응

  • 브라우저 차단 목록에 올려 방문자부터 보호하자는 의견이 많았지만, 한번 오르면 풀기 어려우니 운영자 연락이 먼저라는 반론도 나왔습니다.
  • haveibeenpwned.com처럼 확인용 목록을 공개하자는 제안에는 표적 목록이 된다는 우려와 숨긴다고 덜 취약해지지 않는다는 반박이 맞섰습니다.

댓글

30개 표시 · 전체 142개
  1. baby_souffle HN

    각 도메인을 주요 브라우저 업체에 신고해서 의심 사이트 목록을 갱신하게 하면 어떨까요?

    제가 알기로 스팸, 피싱 같은 악성 의심 사이트는 기본 설정에서 사용자가 빨간 경고 페이지를 먼저 클릭해서 넘어가야 해요. 사이트 주인은 사용자들이 알려 주거나 트래픽이 떨어지는 걸 보고 알게 되지 않을까요?

  2. Aachen HN

    저는 사람들이 파일을 올릴 수 있는 웹사이트를 운영합니다. 올라오는 파일이 다 멀쩡한 건 아니고요. 백신을 켜 둔 누군가가 제 사이트에서 그런 파일을 내려받을 때마다, 도메인 전체가 새로 어느 차단 목록 열다섯 군데에 올랐는지 찾아내는 건 제 몫이 됩니다. 빅테크에는 사람들이 이렇게 하지 않습니다. "GitHub에 악성코드가 있네, github.com을 아무도 못 들어가는 의심 사이트로 신고해야겠다"라고 생각하지는 않지요.

    정답은 아마 WHOIS 데이터에 나오는 abuse 연락처일 겁니다. 프로그램으로 접근할 수 있으니 규모가 커져도 감당이 되고요.

  3. smallerize HN

    적어도 그쪽은 사용자 업로드 데이터에 별도 도메인을 씁니다. 예컨대 googleusercontent.com 같은 것이요. 더 나아가 사용자마다 서브도메인을 줄 수도 있습니다. 그러면 차단 목록이 적어도 한 번에 사용자 한 명씩만 차단할 수 있게 됩니다.

  4. JdeBP HN

    BBS 시절의 지혜를 하나 알려 드리겠습니다. 그 시절에도 작고 비영리인 경우가 많은 노드에 사람들이 나쁜 파일을 올리는 똑같은 문제가 있었습니다. 답은 업로드할 때 파일을 검사하는 것이었습니다.

    업로드된 파일에 곧바로 백신 스캐너를 돌리는 건 BBS 시절에 널리 퍼진 관행이었고, 같은 종류의 악용에 대응해 생겨난 것입니다. FTP 사이트도 그렇게 했습니다. 셰어웨어 FTP 사이트에서는 파일이 업로드되고 나서 업로드 디렉터리를 벗어나 다운로드 영역에 올라가기까지, 보통 (일정에 맞춰 돌리는) 바이러스 검사를 위한 지연 시간이 있었습니다.

    다만 기사 제목이 다루는 건 사용자가 올린 파일을 호스팅하는 문제가 아닙니다. 어떤 합리적인 시스템에서도 사용자가 올린 파일이 사이트가 직접 배포하는 자바스크립트에 그대로 들어가지는 않습니다. 기사의 상황은 당신의 경우와도, BBS와도 비슷하지 않습니다. 문제의 한 형태가 사라진 제3자를 가리키는 스크립트 링크이니까요. 그러니 사용자가 올린 나쁜 파일을 어떻게 하느냐는 이야기는 스콧 헬메(Scott Helme)가 실제로 던진 질문에서 벗어난 곁가지입니다.

  5. wakaru44 HN

    요즘은 이게 훨씬 비싸졌다고 생각합니다. 저희는 하고 있는데 연산 비용이 상당합니다. 작은 취미용 머신으로는 안 되고 덩치 큰 취미용 머신이 필요합니다. 가끔은 그 취미가 좀 덜 보람 있게 느껴지기도 하고요...

  6. deepsun HN

    인기 없는 의견이지만, 낯선 사람의 업로드를 받는 웹사이트 운영자는 그 업로드에 책임을 져야 한다고 생각합니다. "내 것 아니고, 나는 배포만 했을 뿐"이라고 할 수는 없습니다.

    UPDATE: 인기가 없는 이유는 운영자가 파일을 관리하느라 할 일이 많아지기 때문입니다. 페이스북 같은 대형 사이트는 형편없는 관리로 악명이 높고요. 사용자 M명당 관리자 N명을 고용하라고 그들에게 의무화하는 것도 아니잖습니까.

  7. Aachen HN

    그게 법이라면 저는 괜찮습니다. 정말 답답한 건 이중잣대입니다. 마이크로소프트나 Wetransfer는 아무 문제 없이 호스팅하는 걸 저는 못 한다는 거요.

  8. SamInTheShell HN

    제대로 쓸 만한 LLM을 한 달 10달러짜리 클라우드 서버에서 돌릴 수 있게 되면(콘텐츠 관리용으로요) 그때는 저도 그 말에 동의할게요. 그 시점이 지나면 아마 오래 인기 없는 의견으로 남진 않을 거예요.

    그래도 절충안은 있어요. 유튜브, 페이스북 같은 플랫폼은 이제 변명할 여지가 없어요. 이미 갖고 있는 모델로 말 그대로 스캔해서 처리할 수 있잖아요. 그러니 법안은 그런 곳의 역량을 기준으로 써야 해요. 작은 커뮤니티에서 인디 게임 개발자 몇 명을 도우려는 사람 같은 이를 망치지 않게요.

  9. phyzome HN

    네, 아마 그게 정답일 거예요. 사용자를 바로 보호하고, 사이트 주인도 금방 알게 될 테니까요. :-)

    가장 우선할 의무는 사용자에게 있지, 감염을 자초한 사이트 주인에게 있지 않아요.

  10. bragr HN

    안타깝게도 10년 전에 제가 그렇게 알게 됐습니다. 제 사이트에서 쓰던 서드파티 의존성을 누군가 해킹했거든요.

  11. baby_souffle HN

    안타깝게도 10년 전에 제가 그렇게 알게 됐습니다. 제 사이트에서 쓰던 서드파티 의존성을 누군가 해킹했거든요.

    고객이 당신 사이트에서 고약한 바이러스에 걸렸다고 알려 오는 것보다는 낫죠!

  12. mnahkies HN

    제가 겪은 최악은 12년쯤 전이었습니다. 제가 사이트와 CMS를 만들어 준 동네 골프클럽에서 전화가 왔어요. 제가 해야 했던 만큼 패치를 해 두지 않은 탓이었는데, 클럽 회원 한 분이 토요일 대진표 대신 포르노 광고가 떴다고 알려 오셨습니다... 확실히 교훈이 됐죠.

  13. bugfix HN

    왜 먼저 주인에게 경고해 보지 않나요? 목록에서 빼는 건 정말 골치 아프거든요.

  14. cuu508 HN

    웹사이트에 연락처가 없고 WHOIS 연락 양식에 보내도 반응이 없으면 어떻게 하죠?

  15. Aachen HN

    WHOIS 데이터에 등록된 abuse 연락처에 연락하는 건 첫 단계일 뿐입니다. 그게 안 되면, 그때는 도메인 레지스트리에 등록된 연락 수단이 죽어 있다고 알리고, 그러고 나서 해당 사이트를 차단 목록에 올리는 게 말이 됩니다.

  16. vogu66 HN

    그것도 이들이 아는 웹사이트에 한해서일 뿐입니다.

    어떤 악성 자바스크립트가 돌아다니는지, 그걸 어떻게 알아보는지 안다면 브라우저가 백신 기능을 갖춰서 문제의 코드를 차단할 수도 있지 않을까요? 선택해서 켜는 기능이 아니라 기본으로 켜 두고 끌 수 있게 하는 겁니다. 알려진 악성 JS를 검사해서 제거하는 거죠. 침해된 사이트 상당수는 한 번 뚫린 뒤 그대로일 테고, 공격자들이 차단당할 때마다 감염된 모든 서버의 악성코드를 일일이 갱신하러 다니지는 않을 테니까요.

    하지만 웹이 이미 너무 비대해졌는데, 알려진 유해한 군더더기를 걸러내자고 모든 걸 더 느리게 만들자는 제안만 해도 몸서리가 쳐집니다.

  17. Guestmodinfo HN

    웹사이트를 하나 만들어서 15579infected.com 같은 이름을 붙이고 모든 웹사이트를 나열하세요. 대부분의 사이트 주인들은 입소문으로 금방 알아채고 당신 사이트를 찾아와 연락할 겁니다. 그러면 각 사이트에 어떤 취약점이 있는지 알려 줘서 고치게 하면 됩니다. 이 서비스로 요금을 받을 수도 있고요.

  18. Jolter HN

    감염 내용을 알려 주면서 돈을 받으면, 잘 모르는 사이트 주인에게는 갈취처럼 보일 위험이 있습니다. 상당수는 당신과 이야기하기보다 경찰에 신고할 수도 있고요.

    그냥 정보를 알려 주세요.

  19. henearkr HN

    이게 맞는 방법입니다. 다른 댓글이 말한 것과 달리 이건 "이름 공개로 망신 주기"가 아닙니다. 그냥 사이트 주인이 자기 사이트가 목록에 있는지 확인할 수 있는 데이터베이스일 뿐이에요.

    haveibeenpwned.com과 아주 비슷한 아이디어이고, 그 사이트는 엄청나게 도움이 되고 있죠.

  20. sampaio96 HN

    이봐요, 그러지 마세요.

  21. auslegung HN

    왜 안 되죠?

  22. alienbaby HN

    어떤 경로로든 자바스크립트 인젝션에 취약하다고 알려진 표적들을 아무나 가져가라고 내놓는 꼴이잖아요?

  23. Topfi HN

    그래서요? 목록에 안 올라 있다고 덜 취약해지진 않고, 공개 목록에 올라 있다고 웬만한 실력의 공격자가(요즘은 특히) 더 쉽게 찾게 되는 것도 아니에요.

  24. aspect0545 HN

    독일 웹사이트는 운영자 정보(imprint)를 사이트에 게시해야 하고, 거기에 운영 주체와 이메일 주소를 분명히 밝혀야 합니다.

    도메인 목록을 AI에게 주고 연락처를 수집하게 하세요. 그런 다음 이메일을 보내세요.

    아니면 웹사이트들이 쓰는 CDN을 살펴보고 그 CDN에 연락하세요.

    그것도 아니면 나라별로 가장 큰(상위 10개) 호스팅 업체에 연락해서 이 문제를 이야기하세요. 목록을 넘겨주면 자기네가 호스팅하는 사이트인지 쉽게 확인할 수 있을 겁니다.

    모든 걸 한꺼번에 해결할 필요는 없습니다. 최악인 곳들부터 살펴서 해결하세요.

  25. Onavo HN

    더 쉬운 방법도 있어요. 그냥 DNS 등록 업체에 소환장을 보내면 되죠.

  26. theamk HN

    구글 세이프 브라우징(Google Safe Browsing) 차단 목록에 올리도록 힘써 보세요(그런데 이 사이트들이 왜 아직 목록에 없는 걸까요? 구글이라면 분명 이 수법에 관심이 있을 텐데요).

    구글, 페이스북, Bing 같은 대형 플랫폼이 이 사이트들을 차단해 줄 겁니다. 트래픽은 거의 0으로 떨어지겠죠. 그다음에는

    웹 관리자가 알아채고 사이트를 고치든,

    사람들이 방문을 그만두든 둘 중 하나입니다.

    어느 쪽이든 더 이상 감염되는 사람이 없으니 모두에게 이득이죠.

  27. Aachen HN

    그다음에는: \n\n 웹 관리자가 알아채고 사이트를 고치든 \n\n 사람들이 방문을 그만두든

    좋습니다, 그럼 이게 당신 사이트라고 해 봅시다. Firefox가 경고를 띄우는 걸 보고, 문제를 찾아서, 악성 의존성을 제거하고 새 버전을 배포합니다. 그다음은요? 차단을 풀려면 누구에게 말해야 합니까?

    저는 차단 목록에 올라 있는 사이트를 운영하는데, 한 번 올라가면 벗어날 길이 없습니다(이 스레드의 다른 곳에 설명해 두었습니다: https://news.ycombinator.com/item?id=50398014 ). 이런 장치는 방치된 사이트에는 쓸모가 있지만, 취약점이나 악용 신고에 즉시 대응하는 관리자에게까지 적용되는 건 바라지 않습니다.

    대부분의 사람들이 이 사실을 모른다는 건 이해하지만, 아예 없애 버리자는 주장을 보면 좀 답답합니다. 이 15000개 사이트 중 하나가 Onedrive였다면 그렇게 하지 않았을 겁니다. 해결책은 마이크로소프트와 이야기하는 것임을 알았을 테니까요. 그쪽이 감염을 고치지 않을 때에야 사이트를 내리는 게 말이 됩니다.

  28. jeroenhd HN

    대부분은 기본 설정의 Chrome을 쓰고, 거기에 백신을 더 쓰는 사람도 있을 겁니다. 어차피 이 사이트들은 목록에 올라갈 겁니다.

    CERT와 공조하거나 이메일로 기본적인 연락을 시도하는 것도 좋은 생각일 수 있습니다. 하지만 이메일 주소가 어디에도 없고 관련 대응팀을 찾을 방법도 없다면, 도메인을 신고하는 게 당연한 수순으로 보입니다.

    차단 목록에 오르는 건 끔찍하지만, 신원 도용, 드라이브바이 악성코드, 신용카드 사기도 마찬가지입니다. SECURITY.txt나 연락용 이메일 주소가 없다면, 이런 사람들이 (모르고? 일부러?) 피해를 퍼뜨리는 걸 막으려고 할 수 있는 일이 별로 없습니다.

  29. theamk HN

    대부분의 사람들은 다른 경험을 전합니다. 이 블로그 글이 마음에 드는데, 사이트 차단을 풀려면 누구에게 말해야 하는지에 대한 답도 직접 나옵니다.

    https://news.ycombinator.com/item?id=47183953

    그리고 몇 시간 만에 복구된 또 다른 사례도 있습니다.

    https://news.ycombinator.com/item?id=45538760

    차단 목록이 이렇게 많은 게 좋다는 말은 아닙니다. 다만 목록에 올랐다가 돌아온 사이트들도 있습니다. 실제로 문제를 고쳐야 하는 건 맞는 것 같습니다. 사이트에 아무것도 바꾸지 않고 차단이 풀리길 기대할 수는 없으니까요.

  30. athrowaway3z HN

    답을 의심하고 있다는 것부터가 뭔가 크게 잘못됐다는 신호라고 생각합니다.

    책임 있는 공개(responsible disclosure)는 피해를 막기 위한 것입니다. 공개 방식의 선택지를 따져 보고, 영향과 피해를 저울질해서 전체적으로 가장 나은 쪽을 고르는 겁니다.

    그들은 이미 감염됐습니다. 적어도 당신 주장으로는요.

    기업들이 책임 있는 공개를 체면과 평판을 지키는 수단으로 쓰고 싶어 한다는 건 압니다. 둘 다 가능하다면야 그렇게 하면 되겠죠.

    하지만 자기 판단이 맞다고 믿는다면 하나를 골라서 그 결과를 감수해야 합니다. 그리고 올바른 쪽을 고르는 건 그리 어렵지 않습니다.

    사실 올바른 선택을 하지 않을 거라면 "책임 있는 공개"라는 말을 잘못 쓰는 건 그만둬야 합니다.

    감염됐다는 걸 증명하는 URL을 공개하세요. 하나가 고쳐질 때마다 자동으로 갱신하고요.

Hacker News에서 보기 ↗