IL-0509 SourceHut · 2024-01-10networkingsecurity
DDoS 뒤 상위 망의 null route 로 SourceHut 의 PHL 데이터센터 망이 끊겨 170시간 동안 장애가 이어졌다
SourceHut 은 자기 서버를 PHL, AMS, FRE 세 데이터센터의 코로케이션에 두었다. PHL 이 주 데이터센터였고, FRE 는 오프사이트 백업용, AMS 는 앞으로 옮겨 갈 인프라를 연구하는 곳이었다. 2024년 1월 10일 06:00 UTC 무렵 PHL 인프라를 노린 layer 3 DDoS 가 시작됐다. layer 3 공격은 망 사업자의 도움 없이는 막을 수 없었다. 코로케이션 사업자는 자기 AS 의 서브넷을 SourceHut 에 내주고 Cogent 와 Level 3 로 라우팅했다. 이 가운데 Cogent 가 SourceHut 의 하위 AS 에 null route 를 걸어 09:00 UTC 무렵 PHL 망 전체가 끊겼다. SourceHut 은 공격 자체보다 PHL 상위 망의 대응이 인프라에 더 큰 피해를 줬다고 적었다.
코로케이션 사업자는 14:00 UTC 업무 시간에야 연락이 닿았다. 사업자가 Cogent 를 설득해 null route 를 /24 에서 /32 로 좁히자 18:00 UTC 무렵 서비스가 대부분 돌아왔다. 다음 날 06:30 UTC 무렵 공격이 넓어지자 사업자가 서브넷을 다시 null route 했고, 09:00 UTC 에 SourceHut 은 AMS 로 긴급 이전하고 백업에서 복원하기로 했다. 대기 데이터베이스는 운영 데이터와 30초 이내로 차이가 났고, 큰 저장소 백업은 12시간을 넘지 않았다.
SourceHut 은 AMS 에 새 환경을 처음부터 만들었다. 외부 DNS 로 옮기고, 새 주 데이터베이스를 띄우고, FRE 의 백업을 AMS 로 복원했다. 마지막 백업 이후의 차이는 손으로 반영했고 새 메일 시스템도 갖췄다. Cloudflare 의 견적은 작은 회사가 감당할 수 없는 금액이었다. 그래서 OVH 서버를 두고, 트래픽을 OVH 의 DDoS 방어 망을 거쳐 AMS 의 운영 서브넷으로 NAT 했다. 처음에는 모든 트래픽을 그대로 NAT 해서, 공격이 OVH 로 옮겨 왔을 때 들어온 DDoS 가 OVH 의 방어가 걸리기 전 잠깐 AMS 로 넘어갔다. 그 때문에 새 OVH 계정이 나가는 DDoS 의 출처처럼 보여 OVH 와 이 문제를 푸는 데 품이 들었다. 1월 12일에는 PHL 망 사업자가 임시 서브넷을 내줘 PHL 서버에 대역 외로 접근할 수 있었다.
paste 와 project hub 는 1월 11일 19:00 UTC 에 돌아왔다. git.sr.ht 와 hg.sr.ht 는 20:00 UTC 까지 조금 오래된 백업 데이터로 읽기 전용으로 돌아왔고, git.sr.ht 는 1월 13일 11:00 UTC 에 읽기와 쓰기를 모두 되찾았다. 커뮤니티가 관리하는 hg.sr.ht 는 커뮤니티 관리자가 도와줄 수 있을 때까지 늦어져 1월 15일 08:20 UTC 에 완전히 돌아왔다. pages.sr.ht 가 쓰는 S3 호환 객체 저장소는 오프사이트 백업에서 빠져 있어서 PHL 로 가는 대역 외 링크로 서비스했다. builds.sr.ht 는 OVH 베어메탈 서버에서 1월 16일 18:00 UTC 에 빌드 작업을 다시 받았고, 사용자마다 IPv6 주소를 따로 쓰는 chat.sr.ht 가 1월 17일 10:30 UTC 에 마지막으로 돌아왔다. SourceHut 은 유료 사용자 모두에게 7일 무료 이용으로 보상했다.
- 심각도
- –
- 영향 범위
- All SourceHut services; partial service returned from 12 January and full service on 17 January, and pages.sr.ht users with apex records on the PHL subnet had to update them
- 영향 사용자
- all SourceHut users; paying users were credited 7 days of free service
- 지역
- PHL datacenter
- 감지까지
- 0m
- 복구까지
- 170h
증상
2024년 1월 10일 06:00 UTC 무렵 모니터링 시스템이 SourceHut 의 PHL 인프라에 이상이 있다고 경보를 울렸다. 09:00 UTC 무렵에는 PHL 망에 아예 닿을 수 없게 됐다.
Cogent 가 SourceHut 의 하위 AS 에 null route 를 걸면서 PHL 망은 SourceHut 직원에게도, 일반 사용자에게도 닿지 않았다.
운영팀은 코로케이션 사업자에게 연락하려 했지만 닿지 않았다. 사업자는 몇 년 사이 두 번 인수됐고, 운영팀이 쓰던 티켓 포털은 폐기됐으며 SourceHut 계정은 새 시스템으로 옮겨지지 않았다. 사업자에게는 14:00 UTC 에 업무 시간이 시작되고서야 닿았다.
null route 가 /24 전체에서 공격받던 IP 주소 하나인 /32 로 좁혀지자 18:00 UTC 무렵 서비스가 대부분 돌아왔다. 다음 날 06:30 UTC 무렵 공격이 PHL 서브넷의 다른 부분까지 넓어지자 코로케이션 사업자가 서브넷을 다시 null route 했고, 그 뒤로 서브넷에는 계속 닿지 않았다.
원인
- 촉발
- 2024년 1월 10일 06:00 UTC 무렵 SourceHut 의 PHL 인프라를 노린 layer 3 DDoS 가 시작됐다. 상위 망인 Cogent 가 이에 대응해 SourceHut 의 하위 AS 에 null route 를 걸었다.
감지
06:00 UTC 무렵 모니터링 시스템이 이상을 알아채 경보를 울렸고, 운영팀은 곧 조사를 시작했다.
조치
- 코로케이션 사업자가 Cogent 를 설득해 null route 를 /24 전체에서 DDoS 가 노리던 IP 주소 하나인 /32 로 좁혔다.
- 외부 DNS 로 옮겼다.
- 새 주 데이터베이스를 띄웠다.
- FRE 의 백업을 AMS 로 복원했다.
- 운영 데이터와 마지막 백업 사이의 차이를 손으로 반영했다.
- 새 메일 시스템을 갖추고 메일 서비스를 그 시스템에 맞게 설정했다.
- OVH 서버를 두고 트래픽을 OVH 의 DDoS 방어 망을 거쳐 AMS 의 비공개 운영 서브넷으로 NAT 했다. 이 방식으로 종단 간 암호화를 지키면서 임의의 TCP 프로토콜도 서비스했다.
- 1월 12일 PHL 망 사업자가 임시 서브넷을 내줘 PHL 서버에 대역 외로 접근했고, 이것으로 대체 인프라를 더 빨리 갖췄다.
- PHL 에서 AMS 로 객체 저장소를 옮기는 동안 pages.sr.ht 를 PHL 로 가는 대역 외 링크로 서비스했다. 성능에는 제약이 있었다.
- pages.sr.ht 가 새 서브넷과 IP 주소로 옮겨 가면서, apex 레코드가 PHL 서브넷을 직접 가리키던 사용자에게 손으로 고치는 방법을 메일로 보냈다.
- AMS 의 연산 용량이 모자라 builds.sr.ht 의 빌드 워커를 OVH 의 전용 베어메탈 서버에서 돌렸다.
후속 조치
- 새 대기 데이터베이스를 갖춘다. 사고 뒤 작업 가운데 이미 끝난 일이다.
- AMS 에서 FRE 로 백업을 받도록 설정한다. 이미 끝난 일이다.
- 새 모니터링 시스템을 설치한다. 진행 중인 일이다.
- PHL 데이터센터의 설비를 완전히 정리하고, PHL 의 서버를 포장해 AMS 로 보내 용량을 보탠다.
- 몇 주 안에 빌드용 연산 서버를 PHL 에서 AMS 로 옮긴 뒤 빌드 서비스를 SourceHut 이 운영하는 인프라로 되돌린다.
- SourceHut 을 온프레미스 쿠버네티스 클러스터에서 돌리는 방법을 연구해 구현한다. 내부 유지 보수 때 사용자가 겪는 중단을 줄이고 이런 사고에 더 잘 견디려는 것이다.
- 그 작업이 끝나면 두 번째 운영 데이터센터를 계획한다. 두 데이터센터가 함께 부하를 나누고, 한 데이터센터에 장애가 나면 다른 쪽이 전체 서비스를 넘겨받게 한다.
교훈
SourceHut 은 데이터센터 전체 장애까지 대비해 둔 운영 계획이 이번 대응에 중요했다고 적었다. 이번 사고는 SourceHut 이 이중화와 복원력 목표를 다 이루기 전에, 알고 고치던 약점을 드러냈다. pages.sr.ht 의 S3 호환 객체 저장소가 오프사이트 백업에 들어 있지 않다는 것도 이번에 알았다. SourceHut 은 이번 일로 비상 절차를 실제로 시험해 볼 수 있었고, 안정성을 더 높일 방법을 많이 배웠다고 적었다. 긴급 이전으로 EU 로 옮기려던 장기 목표 상당수를 빨리 이뤘다.
출처
관련 사례
같은 원인 · 공통 ISP·트랜짓 망
같은 원인 · 공통 ISP·트랜짓 망
IL-0267싱가포르 캐시 거점 eqsin 의 전송 회선 두 개가 함께 끊겨 BGP 가 내려가고 eqsin 의 호스트에 닿을 수 없게 됐다Wikimedia Foundation · 2023같은 원인 · 공통 BGP 라우팅
같은 원인 · 공통 BGP 라우팅
같은 원인 · 공통 BGP 라우팅
같은 원인 · 공통 BGP 라우팅
내 클러스터에도 있는지 확인하기
AI 도구와 스크립트용
- 이 사례의 JSON: https://incidentlib-api.benchlet.com/cases/IL-0509
- 가장 비슷한 사례들: https://incidentlib-api.benchlet.com/cases/IL-0509/similar
- MCP 서버(Streamable HTTP, 키 없음):
https://incidentlib-mcp.benchlet.com/mcp
API 는 키가 필요 없습니다. MCP 서버는 search_incidents, get_incident, list_incidents, get_topic, vocab 도구를 내놓습니다. 사용법은 API 와 MCP.