SecurityHeroblog

새 물건은 딱 하나 — 정문으로 오지 않았다

9월 2일, 우리 서버의 문고리는 하루 동안 44,140번 돌아갔습니다. 그런데 안으로 실제로 들어온 '처음 보는 물건'은 하나였고, 그건 하루 23번밖에 열리지 않는 통로로 들어왔습니다. 나머지는 전부 17일째·18일째 똑같은 재방송이었습니다.

학교 정문은 아침마다 붐빕니다. 수백 명이 그 앞을 지나갑니다. 경비 아저씨도 거기 계시고, CCTV도 거기 달려 있습니다. 학교에서 가장 잘 보이는 문입니다.

그런데 학교 안으로 물건이 들어오는 문은 거기가 아닙니다.

급식 재료, 새 책상, 프린터 토너. 이런 건 트럭이 후문으로 싣고 들어옵니다. 후문은 하루에 몇 번 안 열립니다. 지나다니는 사람도 거의 없습니다. 그래서 아무도 안 봅니다.

여기서 질문 하나. 오늘 학교 안에 처음 보는 물건이 하나 들어왔다면, 그건 어느 문으로 들어왔을까요?

2026년 9월 2일, 우리 서버가 정확히 그 모양이었습니다. 문고리는 하루 종일 4만 번 넘게 돌아갔고, 실제로 안으로 들어온 새 물건은 하나였습니다.

먼저 낯선 말 하나만 풀고 가겠습니다. 허니팟은 일부러 허술하게 만들어 인터넷에 내놓은 미끼 서버입니다. 진짜 업무는 하지 않습니다. 누가 들어와서 무엇을 하는지 통째로 기록하려고 열어 둔 기계입니다. 아래 숫자는 전부 거기에 찍힌 것입니다.

우리 학교에는 문이 두 종류 있습니다

사실 우리가 돌리는 허니팟은 두 대입니다. 성격이 아주 다릅니다.

01번은 사람이 실제로 들어와서 명령을 칠 수 있는 서버입니다. 문이 두 개 달려 있습니다. 하나는 SSH, 하나는 텔넷입니다. 둘 다 멀리 있는 컴퓨터에 접속해서 명령을 내리는 방법입니다. 텔넷이 훨씬 오래된 방식인데, 비밀번호가 암호화되지 않고 그대로 흘러갑니다.

02번은 문고리만 달아 둔 서버입니다. 누가 두드리면 “여기 문 있어요” 하고 대답만 합니다. 안으로 들여보내지는 않습니다. 그래서 이쪽에는 로그인 성공도, 명령도, 비밀번호 기록도 애초에 존재하지 않습니다. 여기서 ’접촉’이라는 말은 문을 두드린 횟수이지 열린 횟수가 아닙니다.

사실 이날 두 서버가 받은 숫자는 이렇습니다. 01번은 접속 931건, 02번은 접촉 44,140건입니다.

추정 44,140건을 하루로 나누면 약 2초에 한 번입니다. 아무 홍보도 하지 않은 기계인데 그렇습니다.

정문 쪽 — 다섯 사람이 67초씩

사실 01번에서 실제로 문이 열린 것은 다섯 번입니다. 다섯 번 다 텔넷이었습니다.

시간 순서로 늘어놓으면 이렇게 됩니다. 셋째 칸의 초 단위를 눈여겨보세요. 다섯 줄이 몇 시간씩 떨어져 있는데, 머문 시간과 친 명령 개수는 어떻게 되는지가 이날의 시작점입니다.

  1. 사실 ATK-A16118(텔넷)이 로그인에 성공. 67.0초 동안 명령 31개, 다운로드 1건. TTY 녹화 있음. (KST 09:14)
  2. 사실 ATK-862174(텔넷) 로그인 성공. 69.6초, 명령 31개, 다운로드 1건. 앞 세션과 5시간 34분 간격
  3. 사실 ATK-E78846(텔넷) 로그인 성공. 68.0초, 명령 31개, 다운로드 1건
  4. 사실 ATK-33BCCE(텔넷) 로그인 성공. 67.8초, 명령 31개, 다운로드 1건
  5. 사실 ATK-DC5B7B(텔넷) 로그인 성공. 67.5초, 명령 31개, 다운로드 1건. 직전 세션과 11분 4초 간격
  6. 사실 다섯 세션 전부 같은 해시 a6296a79…(306바이트 셸 스크립트, hxxp://185[.]93[.]89[.]72/wget)를 받아갔다. 같은 파일을 받아간 출발지는 오늘 총 6곳(여섯 번째는 ATK-B07E97)
  7. 사실 389바이트 OpenSSH RSA 공개키(a8460f44…)가 11회, 서로 다른 출발지 별칭에서 관측. 같은 날 '지속성 — SSH 키 심기' 의도도 11회로 수가 일치한다
  8. 사실 02(허니팟 02)에서 733,706바이트 검체 1건 확보(deacb991…, ATK-89DA24). 02 의 오늘 samples_captured 는 1건이다
  9. 사실 01 세션 931건 · 고유 IP 437곳 · 명령 887개. 어제(09-01) 명령 14,085개에서 1/15.9 로 줄었고, 고유 IP 는 414 → 437 로 오히려 늘었다. 한 곳당 세션 2.13회는 아카이브 18일 중 최저다
  10. 사실 02 접촉 44,140건 중 42,905건(97.2%)이 VNC 5900 포트 하나였고, 그걸 만든 출발지는 62곳뿐이다

사실 위의 다섯 줄을 다시 보십시오. 67.0초 · 69.6초 · 68.0초 · 67.8초 · 67.5초. 그리고 명령은 다섯 번 다 31개, 받아 간 파일은 다섯 번 다 1개입니다.

추정 들어온 시각은 제각각입니다. 첫 번째와 두 번째 사이는 5시간 34분, 네 번째와 다섯 번째 사이는 11분 4초입니다. 오는 시간은 안 맞췄는데 하는 일은 초 단위로 맞습니다. 사람이 앉아서 하는 일이 아닙니다. 미리 짜 둔 같은 순서가 재생된 것으로 읽습니다.

추정 다섯 번을 다 합쳐도 5분 40초입니다. 정문이 하루에 열린 총 시간이 그만큼입니다. 그리고 그 5분 40초 동안 155번의 명령이 지나갔습니다.

사실 여기서 이날 가장 어긋나 보이는 숫자를 하나 짚습니다. SSH 문에는 577번, 텔넷 문에는 349번 접속이 있었습니다. SSH 쪽이 1.65배 많습니다. 그런데 실제로 열린 다섯 번은 전부 텔넷이었습니다.

추정 많이 두드린 문과 실제로 열린 문이 다릅니다. 이날 이 어긋남은 뒤에서 한 번 더 나옵니다.

다섯 사람이 들고 나간 건 17일째 같은 물건입니다

사실 다섯 세션이 받아 간 파일은 306바이트짜리 셸 스크립트 하나입니다. 문자 메시지 두 줄 정도 되는 크기입니다.

여기서 말 두 개를 풀고 가겠습니다.

해시(sha256) 는 파일 전체를 계산해서 뽑은 64자리 값입니다. 파일 안의 글자 하나만 달라져도 값이 통째로 바뀝니다. 그래서 “이 파일과 저 파일이 같은 것인가”를 이 값으로 판정합니다.

셸 스크립트는 “이거 하고, 저거 하고” 하는 명령을 차례로 적어 둔 메모지 같은 파일입니다. 306바이트면 아주 짧습니다.

추정 크기와 종류로 보면 이건 무기 자체가 아니라 무기를 받아 오는 심부름꾼입니다. 흔히 로더라고 부릅니다. 다만 이 세션들이 실제로 무슨 명령을 쳤는지 원문이 없어서, 스크립트 안에서 무슨 일이 벌어지는지는 확인하지 못했습니다.

사실 그리고 이 파일의 해시 a6296a79…는 8월 17일부터 9월 1일까지 16일치 기록 전부에 있습니다. 이날까지 17일 연속입니다. 받아 오는 주소 hxxp://185[.]93[.]89[.]72/wget 도 그대로입니다.

사실 이날 가장 많이 배달된 파일은 따로 있습니다. 389바이트짜리 OpenSSH RSA 공개키입니다. 이날 11번, 서로 다른 출발지 별칭에서 관측됐습니다.

공개키가 뭔지 풀고 가겠습니다. 리눅스 서버에는 authorized_keys(허용된 열쇠 목록)라는 파일이 있습니다. 여기에 공개키 한 줄을 적어 두면, 그 짝을 가진 사람은 비밀번호를 아예 묻지 않고 그냥 들어옵니다. 쉽게 말해 비밀번호 없이 열리는 여벌 열쇠를 현관에 하나 걸어 두는 겁니다. 그리고 중요한 건, 비밀번호를 바꿔도 그 열쇠는 그대로 남아 있습니다.

사실 이 열쇠 파일의 해시 a8460f44…는 8월 16일부터 9월 1일까지 17일치 전부에 있습니다. 이날까지 18일 연속입니다.

사실 같은 날 ’지속성 — SSH 키 심기’로 분류된 명령도 11회입니다. 파일 관측 11회와 숫자가 정확히 맞습니다.

추정 그래서 01번 서버 쪽 결론은 짧습니다. 이날 01번에는 처음 보는 것이 하나도 없었습니다. 파일도, 주소도, 세션의 모양도 전부 앞서 본 것들입니다.

그런데 처음 보는 물건이 하나 있었습니다

사실 02번 서버에서 파일 하나가 확보됐습니다. 크기는 733,706바이트입니다.

추정 숫자만 보면 감이 안 옵니다. 견줄 것을 붙이겠습니다. 방금 나온 306바이트 심부름꾼을 2,398개 이어 붙인 크기입니다. 약 717킬로바이트, 스마트폰 사진 한 장쯤 되는 덩치입니다.

사실 그리고 이 파일의 해시 deacb991…는 우리가 들고 있는 17일치 기록 어디에도 없습니다. 이날 유일한 신규 검체입니다.

사실 02번 서버가 이날 확보한 파일은 딱 이 한 개입니다.

추정 그러면 이 물건은 어느 문으로 들어왔을까요. 02번에서 파일이 실제로 실려 들어올 수 있는 통로는 ADB 하나뿐입니다. ADB는 ’안드로이드 디버그 브리지’의 줄임말로, 안드로이드 기기를 컴퓨터에 연결해 앱을 넣고 빼고 하는 개발자용 통로입니다. 나머지 문들은 문고리만 달려 있어서 파일을 받지 않습니다. 그래서 ADB로 들어온 것으로 봅니다. 다만 원자료가 이 다운로드를 ADB에 명시적으로 연결해 주지는 않았습니다. 이건 우리가 구조를 보고 이어 붙인 것입니다.

사실 그리고 여기가 이날의 요점입니다. ADB 통로가 이날 열린 횟수는 23번입니다. 02번 전체 접촉 44,140건 가운데 0.05% 입니다.

사실 같은 날 VNC 포트 하나는 42,905번 두드려졌습니다. 전체의 97.2%입니다. 그리고 그쪽에서 확보된 파일은 0개입니다.

추정 후문 이야기로 돌아가겠습니다. 정문 앞에서 문고리가 4만 번 돌아가는 동안, 학교 안에 새로 들어온 물건은 하루 스물세 번 열리는 문으로 들어왔습니다. 두드린 횟수와 실제로 들어온 것은 비례하지 않습니다.

받아 적을 값들

사실 이날 관측된 파일 네 종을 아래에 옮깁니다. 값을 누르면 복사됩니다 — 읽으라고 있는 게 아니라 차단 목록에 넣으라고 있는 값입니다. 주소는 일부러 망가뜨려 적었습니다(hxxp://, [.]). 그대로 복사해 붙여 넣어도 접속되지 않습니다. 맨 아래 줄이 이날 유일하게 처음 본 값입니다.

sha256
a6296a79f44e21b76604d2d2bbf795d2cf380f70e39d45fbf166707ff3b4a6a4306바이트 POSIX 셸 스크립트. 이날 별칭 6곳이 받아 갔다(ATK-E78846 · ATK-862174 · ATK-DC5B7B · ATK-33BCCE · ATK-B07E97 · ATK-A16118). 8/17~9/01 16일치 브리프에 같은 해시가 있고 이날까지 17일 연속이다
url
hxxp://185[.]93[.]89[.]72/wget위 스크립트가 놓여 있던 자리. 이날 기록된 유일한 다운로드 주소다
sha256
a8460f446be540410004b1a8db4083773fa46f7fe76fa84219c93daa1669f8f2389바이트 OpenSSH RSA 공개키. 받아 온 주소 미기록. 이날 11회 관측이며 별칭 목록은 10개까지만 실려 있다(ATK-B378B9 · ATK-02FD9D · ATK-9E1AE0 · ATK-9F9F2A · ATK-1C84BD · ATK-24A760 · ATK-E5EB34 · ATK-3328AE · ATK-7B1380 · ATK-27FC1E). 8/16~9/01 17일치 전부에 있고 이날까지 18일 연속이다
sha256
4af5a5c98ad132095c6fbe7b02c242153a190a01cc321e50a916a0ca46fbaa629바이트 ASCII 텍스트. 글자 아홉 개 분량이다. 출처는 ATK-BECAD3 한 곳인데 횟수 칸은 6 으로 적혀 있다 — 두 값이 어긋나 횟수는 해석하지 않는다
sha256
deacb991ed2509715160ffdc7907e47b4160eb30d1566217e9047fd5b8850cae733,706바이트. 센서 02 에서 확보, 출처 ATK-89DA24 한 곳. 유포 주소 미기록. 17일치 기록에 없던 해시로 이날 유일한 신규 검체다. 파일 종류·분류는 이 브리프에 없다

사실 다섯 줄 중 주소가 적힌 줄은 하나뿐입니다. 나머지는 전부 ’주소 미기록’입니다.

추정 방어하는 쪽에는 이게 성가십니다. 막을 주소가 없으면 차단 목록에 올릴 것도 없습니다. 특히 389바이트 열쇠는 서버가 밖으로 나가는 통신을 전부 끊어도 안 막힙니다. 문이 열린 그 순간에, 서버 안에서 끝나는 일이기 때문입니다.

이 비밀번호 쓰고 계십니까

사실 이날 로그인 시도는 547회입니다. 하루를 꽉 채워 나누면 약 2분 38초에 한 번, 누군가 아이디와 비밀번호를 넣어 봤습니다.

사실 아래는 그중 서로 다른 IP 3곳 이상에서 관측된 조합만 추린 20종입니다.

아이디 비밀번호 출발지 수
admin admin 15곳
345gs5662d34 345gs5662d34 11곳
root 123456 7곳
root admin 6곳
root password 5곳
root 12345 5곳
root xc3511 4곳
ubnt ubnt 4곳
root pass 4곳
root juantech 4곳
root root 4곳
root 1234 4곳
root 12345678 4곳
root 54321 3곳
support support 3곳
root 888888 3곳
root xmhdipc 3곳
root vizxv 3곳
root 111111 3곳
root 123123 3곳

사실 이날 관측된 아이디·비밀번호 조합은 이 20개가 전부가 아닙니다. 기준을 넘지 못한 조합이 239개 더 있습니다. 그 239개는 개수만 세고 값을 싣지 않았습니다.

추정 이유는 이렇습니다. 한두 곳에서만 나온 조합은 어딘가에서 실제로 유출된 진짜 누군가의 계정일 수 있습니다. 여기 옮겨 적으면 그 사람에게 두 번째 피해를 주는 일이 됩니다. 그래서 세기만 합니다.

사실 그리고 위 표에서 여섯 줄을 다시 보십시오. root/xc3511, root/vizxv, root/xmhdipc, root/juantech, root/54321, root/888888. 이 여섯 조합은 2016년에 공개된 Mirai 봇넷 유출 소스코드에 내장돼 있던 자격증명 표의 조합과 일치합니다.

추정 10년 가까이 지난 목록이 이날도 그대로 왔다는 뜻입니다. 그리고 목록이 안 바뀐다는 건 그 목록이 아직 통한다는 신호입니다. 다만 이날 공격이 Mirai 자체라는 근거는 우리에게 없습니다. 우리는 명령 원문도, 검체 분류도 갖고 있지 않습니다.

국제 분류표에 대응시키면

공격자가 쓴 수법에는 전 세계가 같이 쓰는 번호가 붙어 있습니다. MITRE ATT&CK라는 목록입니다. 아래에서 ID를 누르면 원문 설명으로 갑니다 — 우리 말을 믿지 말고 직접 확인해 보시라고 붙여 둡니다.

  • T1078.001Valid Accounts: Default Accounts — 로그인 성공 5세션, admin/admin 15개 IP 등 공장 기본값 계열 20조합추정
  • T1110.001Brute Force: Password Guessing — 로그인 시도 547회추정
  • T1105Ingress Tool Transfer — '파일 다운로드' 18회, 306바이트 스크립트가 별칭 6곳에 배달추정
  • T1059.004Command and Scripting Interpreter: Unix Shell — 명령 887개, '다운로드 후 실행' 18회추정
  • T1222.002File and Directory Permissions Modification: Linux and Mac — '실행 권한 부여' 135회로 이날 최다 의도추정
  • T1098.004Account Manipulation: SSH Authorized Keys — 'SSH 키 심기' 11회 + 389바이트 공개키 11회추정
  • T1070Indicator Removal — '흔적 삭제' 12회추정
  • T1082System Information Discovery — '정찰 — 시스템' 60회추정
  • T1046Network Service Discovery — 01 의 '정찰 — 네트워크' 1회, 02 의 5개 서비스 접촉 44,140건추정
  • T1021.005Remote Services: VNC — 5900 포트 접촉 42,905건. 저상호작용이라 세션 성립·인증 성공은 관측되지 않았다. 접촉과 협상 시도까지다추정
  • T1021.001Remote Services: Remote Desktop Protocol — 3389 포트 접촉 808건, 고유 출발지 124곳. 위와 같은 한계추정

사실 열한 줄이 전부 ‘추정’ 배지입니다. 우리가 본 것은 명령의 의도 분류와 개수이지, 공격자가 스스로 밝힌 목적이 아니기 때문입니다.

사실 그리고 아래 두 줄, VNC와 RDP에는 단서가 하나 더 붙어 있습니다. 02번은 문고리만 달린 서버라 로그인 성공이라는 사건 자체가 없습니다. 저 4만 건은 ’두드렸다’이지 ’들어왔다’가 아닙니다.

어제 하루 전체

사실 센서 01(사람이 실제로 들어올 수 있는 쪽) 기준입니다.

항목 2026-09-02 견줄 것
세션 931건 하루로 나누면 약 1분 33초에 한 건
고유 출발지 437곳 어제 414곳에서 오히려 늘었다
곳당 세션 2.13회 18일 중 최저. 종전 최저는 8/31 의 2.40회
로그인 시도 547회 약 2분 38초에 한 번씩 문고리를 돌려 봤다. 어제는 3,486회
명령 887개 약 1분 37초에 하나. 어제 14,085개에서 1/15.9
포트 2222 (SSH) 577세션 전체의 62.0%
포트 2223 (텔넷) 349세션 전체의 37.5%. 그런데 문이 열린 다섯 번은 전부 이쪽
TTY 녹화 201건 세션의 21.6%
명령 의도 합계 255회 명령 887개의 28.7%

추정 표에서 가장 이상한 줄은 두 번째입니다. 세션은 1/3.9로, 명령은 1/15.9로 줄었는데 찾아온 곳은 늘었습니다. 사람은 더 많이 왔는데 각자 하는 일은 훨씬 적었습니다. 한 곳당 2.13회는 우리가 들고 있는 18일 중 가장 낮은 값입니다.

사실 이날 명령에 붙은 ’의도’는 이렇게 나뉩니다. ’의도’는 친 명령이 무엇을 하려던 것인지 분류한 값입니다.

의도 횟수
실행 권한 부여 135회
정찰 — 시스템 60회
다운로드 후 실행 18회
파일 다운로드 18회
흔적 삭제 12회
지속성 — SSH 키 심기 11회
정찰 — 네트워크 1회
합계 255회

사실 ’실행 권한 부여’는 내려받은 파일에 “이건 실행해도 되는 프로그램이다”라는 표시를 붙이는 작업입니다. 리눅스에서는 파일을 받아만 놓으면 돌아가지 않습니다. 표시를 따로 붙여야 합니다.

사실 그리고 ‘파일 다운로드’ 18회와 ‘다운로드 후 실행’ 18회가 정확히 같은 숫자입니다. 내려받은 것은 예외 없이 실행 단계로 이어졌다는 뜻입니다.

사실 옆에 세워 둔 02번 서버의 숫자도 옮겨 둡니다. 다시 말하지만 여기 ’접촉’은 두드린 횟수입니다.

서비스 포트 접촉 고유 출발지 한 곳당 평균
VNC 5900 42,905건 62곳 692회
RDP 3389 808건 124곳 6.5회
SMB 445 203건 44곳 4.6회
LDAP 389 185건 46곳 4.0회
MSSQL 1433 16건 8곳 2.0회
ADB (미기록) 23건 (미기록) 확보 검체 1건

사실 여섯 줄의 합이 44,140으로 총계와 정확히 맞습니다. 그리고 맨 위와 맨 아래를 나란히 보십시오. 접촉 42,905건에서 나온 파일은 0개, 접촉 23건에서 나온 파일은 1개입니다.

사실 VNC 쪽에는 모양이 하나 더 있습니다. 이날 이벤트가 가장 많은 상위 7곳의 숫자는 7,242 / 7,163 / 6,673 / 5,107 / 5,060 / 5,040 / 5,035입니다. 그런데 8위는 170입니다.

추정 7위와 8위 사이가 29.6배 절벽입니다. 그리고 상위 7곳을 합친 41,320건은 이날 VNC 접촉의 96.3% 입니다. 이 일곱 곳이 VNC 폭주의 실체로 보입니다.

사실 다만 여기서 멈춥니다. 이 일곱 곳이 서로 관련이 있는지는 알 수 없습니다. 숫자가 비슷하다는 것만으로 같은 주체라고 쓸 수 없고, 우리에게는 확인할 수단도 없습니다.

사실 프로토콜이 말해 준 것도 옮겨 둡니다. 프로토콜 어휘란 접속하는 쪽이 “나는 이 버전으로 말하겠다”고 먼저 제안하는 값입니다.

  • VNC에서 제안된 버전은 003.003이 41,336건, 003.008이 1,135건입니다. 버전이 기록된 42,471건 중 97.3%가 낮은 쪽입니다.
  • SMB 방언 제안은 NT LM 0.12 77건, LANMAN1.0 68건, LM1.2X002 68건 등입니다. SMB 2.???를 제안한 접촉은 3건뿐입니다.
  • RDP 접속 쿠키는 <ip>가 437건으로 가장 많고, hello 184건, eltons 7건, 빈 값 5건, Domain 2건, HQJrlorlj 1건입니다.

추정 RFB 3.3은 인증 방식을 서버가 정하는 옛 버전이라, 인증 없는 화면공유 서버를 넓게 찾는 도구가 선호할 만한 값입니다. 다만 이 해석의 근거는 프로토콜 정의이지 이 데이터가 아닙니다. SMB 쪽도 마찬가지로, 이날 문을 두드린 도구들은 거의 전부 1990년대 방언으로 말을 걸었습니다.

추정 RDP 쿠키 자리에 사용자명 대신 접속 대상 IP를 그대로 넣는 것(437건, 최다)은 사람이 아니라 목록을 훑는 자동화 도구의 흔적으로 읽힙니다.

우리가 가진 가장 좋은 도구가, 하필 오늘 안 닿았습니다

사실 SSH로 들어오는 접속은 프로그램마다 첫 인사말이 조금씩 다릅니다. 그 인사말을 요약한 값을 클라이언트 지문이라고 부릅니다. 어떤 프로그램으로 접속했는지를 가리키는 값입니다. 우리가 “이 접속들이 같은 도구였다”를 말할 때 쓰는 거의 유일한 재료입니다.

사실 이날 지문 군집은 41개가 집계됐습니다. 1위는 acaa53e0a7d7ac7d1255103f37901306(SSH-2.0-OpenSSH_7.4)로, 이날 246곳, 누적 899곳입니다. 이날 01번 고유 출발지 437곳의 56.3% 입니다.

추정 숫자만 보면 “246곳이 한 무리”라고 쓰고 싶어집니다. 쓰지 않습니다. 이 값은 널리 쓰이는 리눅스 배포판에 그냥 들어 있는 기본 OpenSSH 7.4 클라이언트 문자열입니다. 서로 아무 상관 없는 사람들이 같은 값을 갖는 게 정상입니다. 말할 수 있는 건 “246곳이 같은 도구를 쓴다” 까지이고, “246곳이 한 조직이다” 는 이 데이터로 성립하지 않습니다.

사실 그리고 이날은 한계가 하나 더 붙습니다. 문이 실제로 열린 다섯 번은 전부 텔넷입니다. 텔넷에는 지문이라는 것이 아예 없습니다. SSH는 접속할 때 서로 인사말을 주고받지만 텔넷은 그 절차 자체가 없습니다. 다섯 세션의 지문 칸과 접속 프로그램 칸이 모두 빈 값인 이유입니다.

추정 정리하면 이렇습니다. 지문 41개 군집은 전부 SSH 쪽 이야기이고, 이날 실제로 뚫린 다섯 곳은 그 어디에도 들어가지 않습니다. 우리가 가진 가장 좋은 묶는 도구가 하필 이날의 침투에는 닿지 않았습니다. 이건 수집 실패가 아니라 텔넷이라는 방식의 구조적 한계입니다.

그래서 뭘 해야 하나

추정 브리프가 정리한 ‘이 통제가 없었다면’ 일곱 가지를, 이날 데이터가 가장 세게 받쳐 주는 순서로 놓습니다.

1. 공장 출고 계정과 흔한 비밀번호를 없앤다 — 이날 문이 열린 다섯 번은 전부 로그인에 성공한 것입니다. 그리고 앞의 표 20종이 전부 기본값이거나 네 자리 숫자입니다. 열린 다음을 보십시오. 평균 68초 안에 명령 31개. 실서버였다면 그 68초 안에 파일 하나가 내려오고 실행 표시가 붙었습니다. 사람이 알아차릴 시간이 없습니다.

2. 텔넷을 끈다 — 이날 성공한 다섯 건이 전부 텔넷입니다. 텔넷에는 열쇠 인증이라는 선택지 자체가 없고, 비밀번호가 암호화되지 않은 채 흘러갑니다. 그래서 텔넷 쪽에서 할 일은 ’열쇠를 쓰자’가 아니라 ‘그 서비스를 끄자’ 입니다. SSH 쪽은 비밀번호 인증을 막고 열쇠만 허용하면, 이날의 547회 시도가 전부 인증 단계에서 끝납니다.

3. 원격 접속·관리 포트를 인터넷에 그대로 열어 두지 않는다 — 아무 홍보도 하지 않은 기계 두 대에 하루 동안 44,140번과 931번이 들어왔습니다. VNC 한 포트에만 62곳이 42,905번, 한 곳당 692회입니다. 취약점이 하나도 없어도 이만한 압력이 상시로 걸립니다. 노출 자체가 시도량을 결정합니다. VPN이나 허용 IP 뒤로 옮기면 이 시도량 전체가 인증 단계에 닿기 전에 사라집니다.

4. 안드로이드 디버그 통로(ADB)를 꺼 둔다 — 이날의 요점입니다. 접촉으로는 44,140건 중 23건, 0.05% 입니다. 그런데 이날 확보된 신규 검체는 거기서 나왔습니다. 안 쓰는 개발자용 통로를 켜 둔 채로 인터넷에 붙여 놓으면, 두드리는 횟수가 적어도 실제 반입은 그쪽으로 일어납니다.

5. 서버에서 밖으로 나가는 연결을 제한한다 — 침입자가 들어온 뒤 진짜 무기를 가져오는 단계는 전부 바깥으로 나가는 연결입니다. 이날 ‘파일 다운로드’ 18회와 ‘다운로드 후 실행’ 18회가 그것입니다. 나가는 통신을 기본으로 막고 필요한 목적지만 허용했다면, 로그인은 뚫려도 18회의 반입은 실패했습니다. 두 번째 방어선이 여기입니다.

6. 로그를 서버 밖에 따로 남긴다 — 흔적을 지우려는 의도가 이날 12회 관측됐습니다. 로그가 서버 안에만 있었다면 이 12회가 성공했을 것이고, 나중에 조사하는 사람은 ’아무 일도 없었다’는 로그를 보게 됩니다. 우리가 이 12건을 셀 수 있는 이유는 로그가 허니팟 바깥에 따로 쌓이기 때문입니다.

7. ’몇 번 틀리면 잠금’에만 기대지 않는다 — 이날 이 항목은 양면입니다. 01번은 한 곳당 세션이 2.13회입니다. 한 곳이 두세 번 두드리고 빠지니까 ‘5회 실패하면 차단’ 같은 임계값은 이날 거의 발동하지 않았을 겁니다. IP 기준 차단이 무력해지는 모양입니다. 반대로 02번의 VNC는 한 곳당 692회였습니다. 여기에 속도 제한이 걸려 있었다면 42,905건 중 대부분이 잘렸습니다. 같은 조치가 어느 문에서는 효과가 없고 어느 문에서는 결정적입니다.

사실 그리고 5번에 단서를 답니다. SSH 키 심기는 밖으로 나가는 연결이 필요 없습니다. 나가는 통신을 다 막아도 이건 안 막힙니다. 서버를 쓰신다면 ~/.ssh/authorized_keys 파일을 한 번 열어 보십시오. 내가 넣은 기억이 없는 줄이 있으면 그게 남의 열쇠입니다. 비밀번호를 바꾸는 것으로는 지워지지 않습니다.

전에도 있었던 일

추정 Mirai 봇넷(2016년). 텔넷과 장비 공장 기본 계정 사전을 이용해 IoT 기기를 대량 감염시킨 사례입니다. 그때 소스코드가 공개되면서 안에 들어 있던 자격증명 표도 같이 드러났습니다. 이날 우리가 인용한 20조합 중 여섯 개(xc3511, vizxv, xmhdipc, juantech, 54321, 888888)가 그 표의 조합과 일치합니다. 10년 가까이 지난 목록이 아직 그대로 돌고 있다는 뜻이고, 그건 그 목록이 여전히 유효하다는 신호입니다. 다만 이날 관측을 Mirai로 귀속하는 것이 아닙니다. 우리는 명령 원문도 검체 분류도 갖고 있지 않습니다. 감염 대수나 피해 금액 같은 수치도 인용하지 않습니다. (근거: 공개 유출 소스코드, 미국 US-CERT/CISA 경보 TA16-288A)

우리는 관측에서 끝내지 않습니다

사실 이날 확보한 유포 주소 hxxp://185[.]93[.]89[.]72/wget 과 신규 검체 deacb991…는 C-TAS(한국인터넷진흥원 사이버위협정보 분석·공유 체계)로 신고하는 대상입니다.

추정 이날처럼 01번에 새 것이 하나도 없는 날에도, 02번에서 나온 신규 해시 한 건은 신고할 값입니다. 후문으로 들어온 그 하나가 이날 우리가 바깥에 내놓을 수 있는 유일한 새 정보였습니다.

사실 다만 단서를 답니다. 우리가 확인할 수 있는 것은 전송이 성공했다는 것까지입니다. 받는 쪽에 실제로 적재됐는지는 이 기록으로 말할 수 없습니다.

우리가 모르는 것

이 글에서 가장 중요한 부분입니다. 위에서 적은 것보다 적지 못한 것이 더 많습니다.

  • [핵심] 다섯 세션이 무엇을 실행했는지는 모릅니다. 우리가 가진 것은 의도 분류와 명령 개수뿐이고 명령 원문이 없습니다. TTY 녹화는 존재만 확인되고(이날 201건, 누적 213건) 내용은 이 브리프에 없습니다.
  • [핵심] 733,706바이트 검체를 ADB 경로로 본 것은 추론입니다. ’02번에서 파일이 실려 들어올 수 있는 통로는 ADB뿐’이라는 구조에서 나온 것이고, 원자료가 이 다운로드를 특정 서비스에 명시적으로 연결해 주지는 않았습니다.
  • 이 신규 검체가 무엇인지도 모릅니다. 파일 종류·분류·MalwareBazaar 태그가 브리프에 없습니다. ’새로 본 파일’이라는 것과 ’악성 파일’이라는 것은 다른 말입니다. 우리는 앞의 것만 말할 수 있습니다.
  • 다섯 세션의 지문·접속 프로그램 칸이 전부 빈 값이라 SSH 지문으로는 이들을 묶을 수 없습니다. 텔넷의 구조적 한계이지 수집 실패가 아닙니다.
  • 다섯 세션이 같은 도구라고 볼 근거는 명령 개수·받아 간 파일·걸린 시간의 일치뿐입니다. 같은 조직이라는 뜻이 아닙니다. 널리 배포된 같은 스크립트를 서로 무관한 사람들이 각자 돌려도 똑같은 모습이 됩니다.
  • 01번의 포트별 세션 합(577 + 349 = 926)이 전체 세션 931과 5건 어긋납니다. 원인은 이 기록으로 알 수 없습니다.
  • VNC에서 버전이 기록된 접촉은 42,471건인데 총계는 42,905건입니다. 434건은 버전 정보가 없습니다. 협상 전에 끊긴 것인지 기록이 누락된 것인지 구분할 수 없습니다.
  • 389바이트 공개키는 11회 관측인데 출처 별칭 목록에는 10개만 실려 있습니다. 열한 번째 출발지가 어디인지 모릅니다.
  • 9바이트 텍스트 검체는 횟수가 6인데 출처는 1곳입니다. 두 값이 어긋나며 어느 쪽이 맞는지 판단할 근거가 없어, 본문에서 횟수를 해석하지 않았습니다.
  • 02번에서 한 출발지가 여러 서비스를 함께 훑었는지는 계산할 수 없습니다. 상위 출발지 목록에는 서비스별 내역 없이 총 이벤트 수만 있습니다. 그래서 VNC 상위 7곳이 다른 문도 두드렸는지 알 수 없습니다.
  • 두 서버의 고유 출발지 교집합을 알 수 없어, 합산 고유 출발지는 최대 737곳이라는 상한으로만 말할 수 있습니다.
  • 배경 통계로 들고 있는 CVE 6,607건·CISA KEV 390건·랜섬웨어 확인 98건, 그리고 Fortinet·Confluence·Log4j2·NetScaler·PAN-OS 항목은 KISA 보안공지에서 뽑은 배경 맥락입니다. 이날 허니팟 관측과 연결된 것이 아닙니다.
  • C-TAS 신고는 전송 계층에서 성공했다는 것까지만 확인됩니다.
  • 별칭(ATK-XXXXXX)은 글 사이에서 같은 마스킹 출발지를 가리키는 표식일 뿐 신원이 아닙니다.
  • 마지막으로, 허니팟은 문을 열어 주도록 만들어진 서버입니다. 로그인 성공은 ’이 비밀번호가 실제 운영 서버에서도 통한다’는 뜻이 아니라 ‘이 비밀번호가 시도되고 있다’ 는 뜻입니다.

그리고 아래는 애초에 확인할 수단이 없는 것들입니다. 추정하지 않습니다.

  • ASN·ISP — 관련 데이터베이스가 없습니다. 어느 통신사·어느 호스팅 대역인지 확인할 수 없습니다.
  • 지리정보 — 동일하게 없습니다. 그리고 IP 지리정보는 그 자체로 귀속 근거가 되지 않습니다. 어떤 국가·기업·개인도 이날의 공격자로 지목하지 않습니다.
  • VPN·Tor·클라우드 여부 — 판별 수단이 없습니다. 이날 02번 상위 7개 출발지가 비슷한 규모라는 점을 해석하지 않은 이유도 이것입니다.
  • VirusTotal — 연동돼 있지 않습니다. 733,706바이트 신규 검체를 포함해 이날 검체의 악성 여부와 분류를 이 글에서 말할 수 없습니다.
  • User-Agent — 두 관측면 다 HTTP가 아닙니다. 01번은 SSH·텔넷, 02번은 SMB·RDP·VNC·MSSQL·LDAP·ADB입니다. 위에서 인용한 RDP 쿠키·SMB 방언·VNC 버전은 User-Agent의 대체물이 아니라 프로토콜이 정해 둔 협상 어휘입니다.
  • CVE 연결 — SSH·텔넷 공격은 대개 특정 취약점을 참조하지 않고 자격증명을 씁니다. 02번도 프로토콜 협상 단계라 마찬가지입니다. 이날 관측 어디에도 특정 취약점을 연결할 수 없습니다.

추정 정리하면 이날은 이렇습니다. 문고리는 44,140번과 931번 돌아갔습니다. 문이 실제로 열린 것은 다섯 번, 다 합쳐 5분 40초입니다. 그리고 그 다섯 번이 들고 나간 물건은 17일째 같은 것, 이날 가장 많이 배달된 열쇠는 18일째 같은 것이었습니다.

추정 학교 이야기로 돌아가겠습니다. 정문 앞이 아무리 붐벼도, 안으로 들어오는 물건은 후문으로 들어옵니다. 이날 처음 보는 물건 하나는 하루 스물세 번 열리는 문으로 들어왔고, 4만 번 두드려진 문에서는 아무것도 들어오지 않았습니다.

그래서 이날 데이터가 가리키는 건 가장 시끄러운 문을 지키라는 쪽이 아닙니다. 세어 보지 않은 문이 몇 개인지부터 세어 보라는 쪽입니다. 기계를 한 대라도 인터넷에 붙여 두고 계시면 오늘 두 가지만 해 보시면 됩니다. 켜 둔 기억도 없는 관리·개발자용 통로가 열려 있는지 확인하는 것, 그리고 ~/.ssh/authorized_keys 를 한 번 열어 보는 것. 뒤의 것은 몇 초 걸립니다.

관측일은 2026년 9월 2일(UTC) 하루입니다. 출발지 IP는 브리프의 마스킹 형태(59.126.x.x)를 그대로 옮겼고 복원하지 않았습니다. 유포 주소는 접속되지 않도록 변형해 적었습니다(hxxp://, [.]). 자격증명은 서로 다른 IP 3곳 이상에서 관측된 조합 20종만 인용했고, 그 기준을 넘지 못한 조합 239종은 개수만 밝히고 값을 싣지 않았습니다 — 한두 곳에서만 나온 조합은 실제 유출 계정일 수 있기 때문입니다. ASN·국적·행위자 귀속은 확인 수단이 없어 추정하지 않습니다.