718. NTP 증폭 (monlist 모니터 목록 명령 악용)
핵심 인사이트: 전 세계의 컴퓨터 시계를 맞춰주는 착한 할아버지 서버(NTP). 이 할아버지에게는 치명적인 수다쟁이 버릇이 있었다. "할아버지, 최근에 누구랑 대화하셨어요?"라고 한마디만(monlist) 물어보면, 며칠 동안 대화했던 600명의 이름표를 랩 하듯이 와다다다 쏟아낸다. 해커는 이 수다쟁이 버릇을 악용해 타겟 서버에 엄청난 데이터 쓰나미를 반사시켜 버렸다. 가장 대표적이고 파괴적이었던 NTP 증폭 공격이다.
Ⅰ. NTP 증폭 공격의 매개체 (UDP 123)
앞서 536번 문서에서 배운 **NTP (Network Time Protocol)**는 장비 간 시계를 동기화해주는 필수 표준입니다. 이 역시 속도를 위해 인사 절차가 없는 **UDP(포트 123번)**를 사용하므로, 겉봉투의 발신자 IP 주소를 마음대로 속여서(IP 스푸핑) 반사 공격(DRDoS)을 날리기에 가장 완벽한 타겟이 되었습니다.
Ⅱ. 증폭의 핵심: monlist 취약점 명령어 🌟
단순히 "지금 몇 시예요?" 묻고 시간만 답장해주면 증폭률이 1:1이라 의미가 없습니다. 해커는 엄청난 답장을 끌어내기 위해 NTP 서버에 숨겨진 관리자용 디버깅 명령어인 monlist (또는 req_mon_getlist) 명령어를 악용합니다.
monlist의 본래 기능: 관리자가 NTP 서버에게 "최근에 너한테 시간 물어보고 접속했던 애들 명단 좀 줘봐"라고 상태를 점검하는 명령어입니다.- 증폭의 폭발성: 해커가 고작 40바이트 남짓한 아주 짧은 텍스트로
monlist패킷을 만들어 던지면, 멍청한 NTP 서버는 자신의 메모리에서 최근 접속했던 최대 600개의 IP 주소 목록 전체를 끌어모아 4,000바이트가 넘는 거대한 텍스트 보따리 100개 묶음으로 쪼개서 대답해 줍니다. - 결과: 들어간 패킷의 크기에 비해 나오는 응답 패킷의 크기가 무려 **200배 ~ 500배 이상 폭발적으로 증폭(Amplification)**됩니다.
Ⅲ. 공격 시나리오 요약
- 해커는 봇넷 수만 대를 동원해, 출발지 IP를 **'피해자 서버 IP'**로 조작합니다.
- 전 세계 인터넷에 널려 있는 취약한 NTP 서버 수십만 대를 향해 일제히
monlist명령 패킷을 쏩니다. - NTP 서버들은 "아, 피해자 서버가 최근 접속자 명단을 요구했구나!"라고 감쪽같이 속아 넘어갑니다.
- 전 세계의 NTP 서버들이 500배로 뻥튀기된 수만 바이트의 응답 쓰레기 명단 데이터(UDP 패킷)를 억울한 피해자 서버로 일제히 쏟아부어 대역폭을 마비시킵니다.
Ⅳ. 현대의 방어 대책 (패치 완료)
오늘날 대부분의 NTP 서버 관리자들은 이 바보 같은 약점을 막아두었습니다.
monlist기능 비활성화: 최신 NTP 서버 프로그램(버전 4.2.7p26 이상)에서는 아예monlist명령어를 디폴트로 비활성화(Disable)하여 지워버렸습니다.- 설정 파일 수정:
/etc/ntp.conf파일에disable monitor혹은restrict default noquery옵션을 넣어서, 외부 해커가 쓸데없는 상태 질의 명령을 던질 수 없도록 원천 차단하고 오직 '시간 동기화' 본연의 임무만 응답하게 틀어막았습니다.
📢 섹션 요약 비유: 해커가 타겟(피해자)을 괴롭히기 위해 동네 수다쟁이 할아버지(NTP 서버)를 악용합니다. 해커는 타겟의 이름표를 달고 할아버지에게 슬쩍 다가가 "할아버지, 어제 마을 잔치 때 누가 왔었나요?"(monlist)라고 단 한 줄의 쪽지를 던집니다. 신이 난 할아버지는 무려 600명의 마을 사람 이름이 빼곡히 적힌 백과사전 두께의 답장(500배 증폭)을 타겟의 집 앞으로 트럭에 실어 던져버립니다. 이 수다쟁이 할아버지가 10만 명이라면 타겟의 집은 쓰레기 종이에 파묻혀 박살이 납니다.