SecurityHeroblog

새로운 건 하나도 없었다 — 14일째 같은 파일이 아홉 곳에서

8월 29일 우리 허니팟에는 처음 보는 것이 하나도 없었습니다. 389바이트짜리 똑같은 파일이 14일째, 이날은 서로 다른 아홉 곳에서 나왔고 유포지 두 곳도 그대로였습니다. '아무 일도 없었다'와 '매일 같은 일이 있었다'는 다른 말이라서, 이날은 변하지 않았다는 것 자체를 적었습니다.

아파트 1층 공동현관 앞에는 아침마다 전단지가 깔려 있습니다.

이사 와서 처음 며칠은 한 장씩 들춰 봅니다. 누가 이걸 다 넣었을까, 이 시간에 어떻게 들어왔을까. 그러다 일주일쯤 지나면 그냥 밟고 지나갑니다. 두 주가 지나면 전단지가 거기 있다는 사실 자체를 인식하지 않게 됩니다.

여기서 한 가지만 짚고 가겠습니다. 전단지가 매일 온다는 건 우리 집이 찍혔다는 뜻이 아닙니다. 이 동네를 도는 사람들이 원래 매일 돈다는 뜻입니다. 그래서 놀랄 일이 아닙니다. 그런데 놀랄 일이 아닌 것과 안전한 것도 같은 말이 아닙니다.

2026년 8월 29일 하루, 우리 허니팟에 남은 기록이 딱 그 이야기입니다. 이날은 새로 나온 것이 하나도 없었습니다. 그래서 이날은 새로 나온 것 대신, 14일 내내 하나도 안 변한 것을 적습니다.

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

이날 우리가 고른 주제는 “안 변했다”입니다

사실 우리는 매일 그날 원자료에서 전날까지 없던 것을 찾습니다. 8월 29일에는 못 찾았습니다. 8월 16일부터 8월 29일까지 14일치 원자료 전부와 맞대 봤는데, 이날 것 중 이전 13일에 없던 항목이 없었습니다.

사실 구체적으로 이렇습니다. 이날 저장된 공개키 파일의 지문 a8460f44…는 14일 전부에 나옵니다. 파일을 받아 오는 주소 hxxp://5[.]182[.]210[.]174 와 hxxp://185[.]93[.]89[.]72 도 각각 1314일에 걸쳐 반복됩니다. 접속 프로그램 지문 16443846…(SSH-2.0-Go)은 누적 30곳에서 이미 봤던 값입니다. 옆에 세워 둔 두 번째 서버의 VNC 접촉 40,525건도 직전 사흘 범위(29,11145,113) 안입니다.

사실 이날 가장 많은 일을 한 세션의 완결성 점수는 41이었습니다. 최근 최고치는 44입니다. 최고 기록도 안 깼습니다.

추정 그래서 “오늘의 새 소식” 형태로는 쓸 게 없는 날이었습니다. 대신 이 상태 자체를 주제로 세웠습니다. 같은 파일이 2주 내내, 매번 다른 출발지에서 반복해 들어온다는 것은 한 번 터진 사건이 아니라 상시로 깔려 있는 배경이라는 뜻입니다. 사건은 끝나지만 배경은 안 끝납니다. 경영 보고서에 쓰기에는 이쪽이 더 불편한 문장입니다.

하루를 시간 순서로

시간 순서로 늘어놓으면 이렇게 됩니다. 줄이 많지만 아래에서 네 번째, 다섯 번째, 여섯 번째 줄만 나란히 보세요. 시각은 각각 새벽·낮·저녁으로 멀리 떨어져 있는데 뒤에 붙은 숫자가 셋 다 같습니다.

  1. 사실 ATK-477862(154.217.x.x, 텔넷) 로그인 성공. 72초간 명령 17개. 의도 5종 — 정찰(시스템)·파일 다운로드·다운로드 후 실행·실행 권한 부여·지속성(SSH 키 심기). TTY 기록 있음. 저장된 파일 0건
  2. 사실 ATK-477862 세션 종료. 이 날 유일하게 정찰→다운로드→실행권한→지속성 4단계 의도가 한 세션에 모두 찍힌 건
  3. 사실 ATK-10149C(45.198.x.x, SSH, 클라이언트 SSH-2.0-Go, 지문 16443846184eafde36765c9bab2f4397) 로그인 성공. 13초, 명령 3개, 파일 10건 반입. 완결성 41로 오늘 최고
  4. 사실 ATK-10149C 세션 종료. 반입물은 hxxp://5[.]182[.]210[.]174 에서 받은 셸 스크립트 2종과 ARM·MIPS·Renesas SH·ARM EABI4 용 ELF 실행파일 4종 — 아키텍처를 모르니 다 던져보는 방식
  5. 사실 ATK-2CB5A2(텔넷) 로그인 성공. 명령 20개, 파일 11건, 18초, 완결성 40
  6. 사실 ATK-48CBAA(텔넷) 로그인 성공. 명령 20개, 파일 11건, 19초, 완결성 40 — 4시간 10분 전 세션과 형태가 같다
  7. 사실 ATK-5392AA(텔넷) 로그인 성공. 명령 20개, 파일 11건, 18초, 완결성 40 — 같은 형태가 하루 세 번째. 세 별칭 모두 같은 1바이트 파일(01ba4719…)을 저장했고, 그 파일은 오늘 33회 반복 저장됐다
  8. 사실 허니팟 01: 세션 634건, 고유 출발지 183개, 로그인 시도 251회, 명령 766개, TTY 녹화 152건. 명령 의도 1위는 '실행 권한 부여' 161회
  9. 사실 허니팟 02: 세션 41,968건, 고유 출발지 247개. VNC 40,525건이 단 36개 출발지에서 나왔다
  10. 사실 공개키 검체 a8460f44…가 14일 전부에 등장. 'SSH 키 심기' 의도 횟수는 7~69회 사이를 오갔고 오늘은 10회로 낮은 편이다(최대는 08-25의 69회)

사실 표에서 눈에 걸리는 건 두 가지입니다. 하나는 06:31의 13초입니다. 로그인부터 파일 10개를 다 받아 놓고 나가기까지 13초가 걸렸습니다. 1.3초에 하나씩 받은 셈입니다. 다른 하나는 아래 세 줄입니다. 06:55, 11:06, 14:52 — 서로 네 시간 가까이 떨어져 있는데 명령 20개, 파일 11건, 18~19초, 완결성 40이 셋 다 똑같습니다.

추정 사람이 세 번 앉아서 한 일로 보기는 어렵습니다. 같은 틀이 하루에 세 번 돌아간 모양으로 읽습니다. 다만 여기까지가 전부입니다. 우리 데이터에는 명령 원문이 없어서 같은 사람이라거나 같은 조직이라고는 말할 수 없습니다.

매일 오는 그 한 장은 광고가 아니었습니다

사실 이날 아홉 곳이 남기고 간 것은 서로 다른 아홉 개가 아닙니다. 똑같은 파일 하나입니다. 389바이트 OpenSSH RSA 공개키이고, 지문(sha256)은 a8460f44… 입니다.

여기서 지문이라는 말을 풀고 가겠습니다. 파일 전체를 계산해서 뽑아낸 64자리 값입니다. 파일 안의 글자 하나만 달라져도 값이 통째로 바뀝니다. 그래서 두 파일이 같은지 다른지를 이 값으로 판정합니다.

사실 389바이트는 문자 메시지 두어 줄 정도 되는 크기입니다. 그리고 이 값은 8월 16일부터 8월 29일까지 14일 연속 같습니다.

공개키가 무엇인지도 그 자리에서 풀겠습니다. 리눅스 서버에는 authorized_keys(허용된 열쇠 목록)라는 파일이 있습니다. 여기에 공개키 한 줄을 적어 두면, 그 짝을 가진 사람은 비밀번호를 아예 묻지 않고 그냥 들어옵니다. 그리고 이게 핵심인데, 비밀번호를 전부 바꿔도 이 목록은 그대로 남습니다. 비밀번호는 문 앞에서 확인하는 것이고, 이 목록은 서버 안에 저장된 것이라서 서로 다른 물건이기 때문입니다.

사실 이날 ’지속성 — SSH 키 심기’로 분류된 명령은 10회입니다. 14일 중 이 값은 7회에서 69회 사이를 오갔고, 최대는 8월 25일의 69회였습니다. 이날은 최대치의 7분의 1 수준으로, 낮은 편에 속합니다.

추정 그런데 이게 이날의 요점입니다. 적게 왔는데 여전히 왔습니다. 전단지가 어제는 스무 장, 오늘은 세 장 들어왔다고 해서 전단지를 넣는 사람이 사라진 건 아닙니다. 양이 줄어드는 것과 멈추는 것은 다릅니다. 그리고 이 종이는 한 장만 들어가도 끝입니다. 14일 중 어느 하루라도 실제 서버 한 대에서 이 줄이 저장됐다면, 그 서버는 오늘도 같은 열쇠로 열립니다. 그동안 비밀번호를 몇 번 바꿨든 관계없습니다.

같은 주소에서 받은 두 파일의 지문이 달랐습니다

사실 06:31의 ATK-10149C가 13초 동안 받아 간 파일 10건을 뜯어보면 이렇습니다. hxxp://5[.]182[.]210[.]174/ok 에서 받은 1,608바이트 Bash 스크립트 두 개, 그리고 같은 주소에서 받은 ELF 실행파일 네 개입니다.

ELF는 리눅스에서 바로 실행되는 프로그램 파일 형식입니다. 그리고 네 개가 각각 ARM·MIPS·Renesas SH·ARM EABI4 용입니다. 이건 CPU 종류입니다. 같은 프로그램이라도 CPU가 다르면 실행되지 않기 때문에, 종류별로 따로 만들어야 합니다.

추정 네 종류를 한 세션에 다 던졌다는 건 이 기계가 무엇인지 모른 채 왔다는 뜻입니다. 열쇠 꾸러미를 통째로 들고 와서 하나씩 꽂아 보는 것과 같습니다. 하나만 맞으면 됩니다. 서버든 공유기든 NAS든 상관없습니다.

사실 네 개를 합치면 291,267바이트입니다. 52,496 + 68,632 + 46,288 + 123,851. 그리고 그중 마지막 하나(ARM EABI4, 123,851바이트)만 디버그 정보가 그대로 붙어 있고 스트립되지 않았습니다. 나머지 셋은 스트립돼 있습니다. 스트립은 프로그램에서 사람이 읽을 수 있는 이름표를 떼어내는 작업입니다. 떼어내면 파일이 작아지고 분석은 어려워집니다. 네 개 중 하나만 그 작업이 안 돼 있어서, 가장 크고 가장 읽기 쉬운 상태로 들어왔습니다.

사실 Bash 스크립트 쪽에는 더 이상한 게 있습니다. 주소도 같고 크기도 정확히 1,608바이트로 같은데, 지문이 서로 다른 두 개(801cba39…, 0c058175…)가 나왔습니다.

추정 같은 자리에서 받았는데 안에 든 게 달랐다는 뜻입니다. 무엇이 달랐는지는 우리가 파일 내용을 브리프에 담지 않아 말할 수 없습니다. 다만 차단 목록을 운영하는 입장에서는 이게 실무적인 문제입니다. 지문을 하나 적어 두면 다른 하나는 그대로 통과합니다.

1바이트짜리 빈 파일이 33번 저장됐습니다

사실 이날 가장 많이 저장된 파일은 공개키도 실행파일도 아닙니다. 1바이트짜리 빈 파일(01ba4719…)이고, 33회 저장됐습니다. 1바이트는 글자 하나 크기입니다. 파일 종류를 알려 주는 표식조차 없어서 “매직 없음”으로 분류돼 있습니다.

사실 전달한 곳은 세 별칭 — 06:55의 ATK-2CB5A2, 11:06의 ATK-48CBAA, 14:52의 ATK-5392AA 입니다. 위 타임라인에서 명령 20개·파일 11건·18~19초가 똑같았던 그 세 건입니다.

추정 세 세션이 각각 11건씩, 셋을 더하면 33건입니다. 숫자가 맞아떨어지므로 세 세션이 각각 같은 빈 파일을 11번씩 저장했을 가능성이 있습니다. 다만 브리프가 그 연결을 직접 적어 주지는 않습니다. 그리고 이 파일이 무엇이며 왜 반복되는지는 모릅니다. 이 이야기는 말미에서 다시 짚겠습니다.

문고리는 6분에 한 번씩 돌아갔습니다

사실 이날 로그인 시도는 251회입니다. 하루를 꽉 채워 나누면 약 6분에 한 번, 누군가 아이디와 비밀번호를 넣어 봤습니다. 서로 다른 출발지는 183곳입니다.

사실 아래는 그중 서로 다른 IP 3곳 이상에서 관측된 조합만 추린 11종입니다. 한 곳에서만 나온 조합은 실제로 어딘가에서 유출된 진짜 계정일 수 있어서 값을 싣지 않습니다.

아이디 비밀번호 시도한 출발지 수
admin admin 13곳
345gs5662d34 345gs5662d34 9곳
root 12345 6곳
root admin 5곳
root 1234 4곳
support support 3곳
root root 3곳
root 111111 3곳
root 123123 3곳
root 123456 3곳
root 12345678 3곳

사실 이 11종 말고, 단일 출처에서만 나온 조합이 142종 더 있습니다. 개수만 적고 값은 쓰지 않습니다.

추정 표를 위에서 아래로 읽으면 성격이 보입니다. admin/admin 을 서로 다른 13곳이 똑같이 쳤습니다. 183곳 중 7%가 약속이나 한 듯 같은 값을 넣었다는 뜻입니다. 두 번째 줄 345gs5662d34 는 아무 의미 없어 보이는 문자열인데 아이디와 비밀번호가 똑같고, 이걸 9곳이 똑같이 쳤습니다. 사람이 하나씩 떠올린 값이 아니라 어딘가 돌아다니는 목록을 그대로 읽고 있다는 뜻으로 읽습니다. 우리를 노려서 만든 목록이 아닙니다. 아무 집에나 넣어 보는 전단지와 같습니다.

놓고 간 파일들

받아 적을 값들입니다. 값을 누르면 복사됩니다 — 읽으라고 있는 게 아니라 차단 목록에 넣으라고 있는 값입니다. 주소는 일부러 망가뜨려 적었습니다(hxxp://, [.]). 그대로 복사해 붙여 넣어도 접속되지 않습니다.

sha256
a8460f446be540410004b1a8db4083773fa46f7fe76fa84219c93daa1669f8f2389바이트 OpenSSH RSA 공개키. URL 미기록. 이날 서로 다른 별칭 9곳(ATK-A3D02E·ATK-BC0C41·ATK-21B541·ATK-D2A7AC·ATK-E2604F·ATK-A4A2EE·ATK-462190·ATK-F2A00A·ATK-085482)에서 저장. 8/16~8/29 14일 연속 동일 해시
sha256
01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b1바이트 빈 파일(매직 없음). 이날 33회 저장. 별칭 3곳(ATK-5392AA·ATK-48CBAA·ATK-2CB5A2)
url
hxxp://185[.]93[.]89[.]72/wget306바이트 POSIX 셸 스크립트가 놓여 있던 자리. 이 주소는 14일 중 13~14일에 걸쳐 반복 등장
sha256
a6296a79f44e21b76604d2d2bbf795d2cf380f70e39d45fbf166707ff3b4a6a4위 주소에서 받아간 파일. 별칭 7곳(ATK-16F62C·ATK-D0357F·ATK-A77FDB·ATK-27CBD2·ATK-AEA2ED·ATK-C58A96·ATK-A16118)
url
hxxp://5[.]182[.]210[.]174/ok1,608바이트 Bash 스크립트가 놓여 있던 자리. 같은 자리에서 크기가 같고 해시는 다른 파일 두 개가 나왔다
sha256
801cba393474f6074020cfb471bb9abcf3f00d53d827382188335a4073470fb7위 자리에서 받은 1,608바이트 Bash 스크립트. ATK-10149C
sha256
0c058175763c510a7633f735ad949472562c790603886e8152557f9a6bd3a63d같은 자리·같은 크기인데 해시가 다른 두 번째 Bash 스크립트. ATK-10149C
url
hxxp://5[.]182[.]210[.]174/2a7cfdELF 32-bit ARM 실행파일이 놓여 있던 자리
sha256
8bdbe21eafc7223a75ea9d075237d389e0c39f6370721f1ea36214989e5bab63ELF 32-bit ARM, 정적 링크, 스트립됨. 52,496바이트. ATK-10149C
url
hxxp://5[.]182[.]210[.]174/44c90cELF 32-bit MIPS 실행파일이 놓여 있던 자리
sha256
a75a98641037e42abb4c543d90e81dafdae3b27e90972b705a2e9242a5bee123ELF 32-bit MIPS MIPS-I, 정적 링크, 스트립됨. 68,632바이트. ATK-10149C
url
hxxp://5[.]182[.]210[.]174/f9b3b1ELF 32-bit Renesas SH 실행파일이 놓여 있던 자리
sha256
41ac975aa0638b879bade9f672fbcdacb303bc6ceb5e92083b85af9cd440cd04ELF 32-bit Renesas SH, 정적 링크, 스트립됨. 46,288바이트. ATK-10149C
url
hxxp://5[.]182[.]210[.]174/d93ab5ELF 32-bit ARM EABI4 실행파일이 놓여 있던 자리
sha256
383819dd8c7df6077d193ace66715d7b3e5d82e0de0ad87ef8a783965786d606ELF 32-bit ARM EABI4, 정적 링크, 디버그 정보 포함·스트립 안 됨. 123,851바이트. 네 개 중 유일하게 이름표가 안 떼어진 파일. ATK-10149C
sha256
4af5a5c98ad132095c6fbe7b02c242153a190a01cc321e50a916a0ca46fbaa629바이트 설정/텍스트. URL 미기록. 이날 7회 저장. 별칭 1곳(ATK-BECAD3). 내용은 브리프에 담지 않는다

추정 이 목록을 위에서 아래로 읽으면 값마다 쓸모가 유지되는 기간이 다르다는 게 보입니다. 맨 위 공개키 지문은 14일째 그대로라 한 번 적어 두면 2주를 씁니다. 반대로 5[.]182[.]210[.]174/ok 의 파일은 같은 날 같은 자리에서도 지문이 두 개였습니다. 지문을 적어 두는 것과 주소를 적어 두는 것은 같은 목록에 들어가지만 수명이 다른 작업입니다.

국제 분류표에 대응시키면

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

  • T1110.001Brute Force: Password Guessing — 로그인 시도 251회 / 고유 출발지 183개추정
  • T1078.001Valid Accounts: Default Accounts — admin/admin(13개 IP), root/root, support/support추정
  • T1082System Information Discovery — '정찰 — 시스템' 75회추정
  • T1105Ingress Tool Transfer — '파일 다운로드' 27회, 검체 10종 저장추정
  • T1222.002File and Directory Permissions Modification: Linux — '실행 권한 부여' 161회추정
  • T1059.004Command and Scripting Interpreter: Unix Shell — 명령 766개, 셸 스크립트 검체 3종추정
  • T1098.004Account Manipulation: SSH Authorized Keys — '지속성 — SSH 키 심기' 10회, 공개키 파일 9개 별칭에서 저장추정
  • T1070Indicator Removal — '흔적 삭제' 10회추정
  • T1046Network Service Discovery — 허니팟 02에서 RDP 쿠키에 'nmap' 문자열 2회, LDAP·MSSQL·SMB 저빈도 접촉추정

사실 아홉 줄 중 가장 큰 숫자는 다섯 번째, 실행 권한 부여 161회입니다. 이날 명령 766개의 21%입니다. 받아 온 파일에 “실행해도 된다”는 표시를 붙이는 작업입니다. 이게 하루 명령의 5분의 1이라는 건, 들어온 쪽의 목적이 구경이 아니라 실행이었다는 뜻으로 읽힙니다.

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

어제 하루 전체

사실 센서 01(고상호작용 허니팟) 기준입니다.

항목 2026-08-29 견줄 것
세션 634건 하루로 나누면 약 2분 16초에 한 번
고유 출발지 183곳 —
로그인 시도 251회 약 6분에 한 번씩 문고리를 돌려 봤다
명령 766개 약 2분에 한 번
포트 2223 332세션 전체의 52.4%
포트 2222 302세션 전체의 47.6%
프로토콜 텔넷 332 / SSH 302 위 포트 수치와 정확히 일치한다
TTY 녹화 152건 —
명령 의도 합계 311회 실행 권한 161 · 정찰(시스템) 75 · 다운로드 후 실행 27 · 파일 다운로드 27 · 흔적 삭제 10 · SSH 키 심기 10 · 정찰(네트워크) 1

사실 포트와 프로토콜 숫자가 332와 302로 정확히 겹칩니다. 그래서 텔넷은 2223, SSH는 2222 라고 맞춰 적었습니다. 다만 이건 숫자를 보고 맞춘 것이고, 세션 하나하나에 포트가 적혀 있는 것은 아닙니다.

텔넷은 아주 오래된 원격 접속 방식입니다. 인터넷 너머에서 그 기계의 명령창을 직접 두드릴 수 있게 열어 두는 통로인데, 비밀번호가 암호화되지 않고 그대로 흘러갑니다. 이날은 그 통로가 절반을 조금 넘겼습니다.

사실 옆에 세워 둔 두 번째 서버(센서 02)의 숫자도 옮겨 둡니다. 이쪽은 저상호작용이라 로그인 성공·셸 명령·자격증명이 애초에 존재하지 않습니다. 세는 것은 ’몇 번 두드렸는가’와 ’프로토콜이 무엇을 제안했는가’뿐입니다. 전부 문을 두드린 기록이지 들어온 기록이 아닙니다.

서비스 포트 접촉 고유 출발지 한 곳당 평균
VNC 5900 40,525건 36곳 1,126회
RDP 3389 1,064건 132곳 8회
SMB 445 246건 23곳 10.7회
LDAP 389 63건 33곳 1.9회
MSSQL 1433 33건 8곳 4.1회
ADB — 세션 37건 — 검체 4건 확보

사실 전체로는 세션 41,968건, 고유 출발지 247곳입니다. 하루로 나누면 약 2초에 한 번 뭔가가 이 서버를 두드렸습니다.

추정 같은 서버인데 두 문 앞의 그림이 정반대입니다. VNC 쪽은 36곳이 한 곳당 1,126회씩 붙어 있었고, RDP 쪽은 132곳이 한 번씩 지나갔습니다. 앞은 소수의 대량 반복, 뒤는 다수의 얕은 훑기입니다.

사실 프로토콜이 말해 준 것도 있습니다. VNC 접촉 40,525건 중 40,488건이 003.003 버전을 제안했습니다. 99.9%입니다. 최신 쪽인 003.008은 31건뿐입니다. SMB 쪽에는 ‘PC NETWORK PROGRAM 1.0’(19회), ‘LANMAN1.0’(36회), ‘Windows for Workgroups 3.1’(18회) 같은 수십 년 된 방언이 섞여 있었습니다. RDP 접속 쿠키에는 <ip> 494회, hello 449회, 그리고 nmap 2회·naap 2회·eltons 2회·빈 값 2회가 찍혔습니다.

추정 99.9%가 같은 낡은 버전을 제안했다는 건 사람 손이 아니라 같은 스크립트가 반복해 두드린 흔적으로 읽습니다. 옛 방언을 먼저 꺼내는 것도 낡은 시스템까지 걸러내려는 폭넓은 스캔의 특징입니다.

사실 상위 출발지 6곳(ATK-43D1F7·ATK-943F0E·ATK-554563·ATK-992AD3·ATK-B24952·ATK-D9A63B)이 각각 5,0515,276건으로 거의 같은 양을 냈고, 다음 3곳(ATK-28B422·ATK-B954FC·ATK-AE6CC0)도 3,1463,171건으로 뭉쳐 있습니다.

추정 같은 작업량을 나눠 가진 분산 스캐너로 보입니다. 다만 이건 규모의 패턴이지 소속의 근거가 아닙니다.

사실 어제(8/28)와 견주면 전반적으로 줄었습니다. VNC 45,113 → 40,525, RDP 2,114 → 1,064, ADB 87 → 37입니다. 직전 사흘 범위(29,111~45,113) 안이라 특별히 몰린 날은 아닙니다.

사실 ADB 검체 4건의 크기는 46,525 · 153,208 · 239,388 · 334,816바이트입니다. 3건이 단일 별칭 ATK-1D7F04, 1건이 ATK-1D7F04·ATK-CBA37D 공동입니다. 이 파일들에는 어디서 받아 왔는지가 기록돼 있지 않습니다. 차단 목록에 올릴 주소가 안 남았다는 뜻입니다.

도구는 그대로였습니다

사실 SSH로 들어오는 접속은 프로그램마다 조금씩 다른 인사말을 씁니다. 그 인사말을 요약한 값을 클라이언트 지문이라고 부릅니다. 어떤 프로그램으로 접속했는지를 가리키는 값입니다.

사실 이날 지문 군집은 45개였습니다. 그중 f555226df1963d1d3c09daf865abdc9a(SSH-2.0-libssh_0.9.6)는 이날 9곳, 누적 289곳에서 관측된 값입니다. 이날 최고 완결성 세션이 쓴 16443846…(SSH-2.0-Go)도 누적 30곳에서 이미 본 값입니다.

추정 출발지 IP는 매일 바뀌는데 도구는 그대로라는 뜻입니다. 이 대목은 같은 날 올린 짧은 영상에서 따로 다뤘습니다.

사실 다만 선을 두 개 그어야 합니다. 첫째, 이건 빌드의 지문이지 사람의 지문이 아닙니다. 같은 배포판에 들어 있는 기본 libssh를 쓰는, 서로 아무 상관 없는 사람도 같은 값을 갖습니다. 45개 군집을 45개 주체로 읽으면 안 됩니다. 둘째, 텔넷에는 이 지문이 애초에 존재하지 않습니다. 이날 세션의 절반 이상이 텔넷이었으므로, 이 방법으로는 그 절반을 아예 묶을 수 없습니다.

그래서 뭘 해야 하나

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

1. authorized_keys 를 한 번 열어 본다 — 이날 중심입니다. 로그인에 성공한 뒤 공격자 쪽 공개키를 심는 행동이 10회, 그 파일을 남기고 간 출발지가 9곳입니다. 서버를 쓰신다면 ~/.ssh/authorized_keys 파일을 열어 보십시오. 내가 넣은 기억이 없는 줄이 있으면 그게 남의 열쇠입니다. 비밀번호를 바꾸는 것으로는 지워지지 않습니다. 사고 대응에서 비밀번호만 초기화하고 이 파일을 안 보면, ‘조치 완료’ 도장을 찍은 뒤에도 문이 열려 있습니다.

2. 기본 계정과 흔한 비밀번호를 없앤다 — 위 표의 11종은 서로 다른 IP 3곳 이상이 실제로 두드린 조합입니다. 이 중 하나라도 살아 있으면 걸리는 시간은 분이 아니라 초 단위입니다. 이날 관측된 다섯 개 세션이 전부 로그인에 성공했고, 가장 빠른 건은 로그인부터 파일 10개 반입까지 13초였습니다.

3. 관리 포트를 인터넷에 그대로 열어 두지 않는다 — 취약점이 없어도 대상이 됩니다. 광고한 적 없는 주소인데 하루에 183곳이 붙었고, 옆 서버에는 247곳이 붙었습니다. 열려 있다는 이유 하나로 그렇습니다.

4. 같은 곳이 계속 두드리면 막는다 — VNC 접촉 40,525건이 36곳에서 나왔습니다. 36곳만 막아도 그날 접촉의 대부분이 사라집니다. 막아야 할 대상이 생각보다 적다는 뜻이기도 합니다. 차단이 없으면 이 소음이 그대로 인증 처리와 로그 저장소를 때리고, 진짜 성공한 한 건이 소음에 묻힙니다.

5. 서버에서 밖으로 나가는 연결을 제한한다 — 파일 다운로드 27회·다운로드 후 실행 27회가 여기서 끊깁니다. 그리고 여기에 하나 덧붙일 게 있습니다. 사실 이날 검체 중에는 압축을 풀어야만 안에 든 주소가 보이는 것이 12건 있었고, 그 주소는 hxxp://31[.]77[.]227[.]121/bins/ 계열이었습니다. 추정 겉면에 URL이 하나도 안 보이는 파일이 안에 유포지를 품고 있었다는 뜻입니다. 파일을 겉만 훑는 검사로는 안 걸립니다.

6. 로그를 서버 밖에 따로 남긴다 — 흔적을 지우려는 의도가 10회 관측됐습니다. 하루 명령 766개 중 10개라 비중은 낮습니다. 다만 우리가 위 타임라인을 적을 수 있는 것도, TTY 녹화 152건과 대조할 수 있는 것도 로그가 서버 바깥에 남아 있기 때문입니다. 로그가 그 기계 안에만 있으면, 지워진 뒤에는 지워졌다는 사실조차 안 남습니다.

사실 그리고 5번에 단서를 하나 답니다. 이날의 주된 지속성 경로였던 SSH 키 심기는 밖으로 나가는 연결이 필요 없습니다. 아웃바운드를 다 막아도 이건 안 막힙니다.

전에도 있었던 일

추정 Mirai 봇넷(2016년, 소스 공개 이후 파생 지속). 텔넷 기본 자격증명 목록으로 로그인한 뒤, CPU 종류별로 따로 만든 ELF 바이너리를 순서대로 던져 맞는 것을 실행시키는 방식입니다. 이날 ATK-10149C가 ARM·MIPS·Renesas SH·ARM EABI4 네 종을 한 세션에 반입한 형태와 구조가 같습니다. 다만 같은 계열이라고 단정하지 않습니다 — 소스가 공개된 뒤 파생본이 워낙 많습니다. (근거: 공개된 소스코드, 미국 US-CERT/CISA 경보 TA16-288A, 미 연방법원 공소·판결 기록)

추정 TeamTNT 리눅스·클라우드 침해 캠페인(2020년~). 약한 인증으로 리눅스 호스트에 들어간 뒤 authorized_keys 에 자기 공개키를 추가해, 비밀번호를 바꾸든 말든 접근을 유지한 사례입니다. 이날 관측된 키 심기 10회와, 같은 공개키 파일이 9곳에서 저장된 패턴이 이 기법과 같습니다. 우리 데이터에는 명령 원문이 없어 같은 도구·같은 행위자라고 말할 근거는 없습니다. (근거: 복수 보안업체 위협 인텔리전스 리포트)

우리가 모르는 것

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

  • 순서를 모릅니다. 03:51의 ATK-477862에 찍힌 다섯 개 의도가 ‘정찰 → 다운로드 → 실행권한 → 지속성’ 순으로 일어났는지 데이터로 확인할 수 없습니다. 그 단계들이 관측됐다는 것만 사실입니다.
  • 같은 세션은 ’파일 다운로드’와 ‘다운로드 후 실행’ 의도가 찍혔는데 저장된 파일은 0건입니다. 다운로드가 실패한 것인지, 성공했는데 저장이 안 된 것인지, 분류만 되고 실제 반입이 없었던 것인지 구분할 수 없습니다.
  • 세션별 접속 포트가 데이터에 없습니다. 포트 카운트(2223=332 / 2222=302)와 프로토콜 카운트(텔넷 332 / SSH 302)가 정확히 일치해서 텔넷=2223, SSH=2222로 맞춘 추정입니다.
  • 이날 명령을 가장 많이 실행한 세 세션(ATK-2CB5A2·ATK-48CBAA·ATK-5392AA)은 각각 명령 20개를 실행하고 파일 11건을 저장했는데 의도 분류가 통째로 비어 있습니다. 분류기가 못 잡은 것으로 보이며, 이 세 세션이 무엇을 했는지는 이 브리프로 알 수 없습니다. 하루 최다 명령 세션들이 분류 공백에 빠져 있다는 점은 따로 확인이 필요합니다.
  • 1바이트 빈 파일이 33회 저장됐고 세 별칭이 공통으로 전달했습니다. 내용이 무엇이며 왜 반복되는지 모릅니다. 본문의 ’세 세션이 11건씩’은 숫자가 맞아떨어진다는 것이고, 데이터가 그 연결을 적어 주지는 않습니다.
  • 같은 주소 hxxp://5[.]182[.]210[.]174/ok 에서 크기가 똑같이 1,608바이트인데 해시가 다른 파일 두 개가 나왔습니다. 무엇이 달랐는지는 파일 내용을 담지 않아 확인할 수 없습니다.
  • 공개키 파일의 지문은 같지만, 그 열쇠가 누구 것인지·같은 개인키 하나로 통제되는지는 모릅니다. 해시가 같다는 건 ’같은 파일’이라는 뜻이지 ’같은 운영자’라는 뜻이 아닙니다.
  • 클라이언트 지문은 빌드의 지문이지 사람의 지문이 아닙니다. 같은 배포판의 기본 OpenSSH·libssh를 쓰는 무관한 사용자도 같은 값을 갖습니다. 45개 군집을 45개 주체로 읽으면 안 됩니다.
  • 센서 02에서 한 출발지가 여러 서비스를 함께 훑었는지 계산할 수 없습니다. 서비스별 고유 IP 합(232)이 전체 고유 IP(247)보다 작아 겹침을 역산할 수 없고, 출발지별 서비스 목록도 없습니다. 0으로 쓰면 거짓이 되므로 값 없음으로 뒀습니다.
  • 센서 01과 02의 고유 IP 교집합을 모릅니다. 두 센서를 합친 고유 출발지 430곳은 상한이며, 실제 값은 더 작을 수 있습니다. 그래서 위 표에서도 두 센서를 합산하지 않았습니다.
  • 센서 02의 다운로드 4건이 ADB 채널에서 나온 것으로 보이지만 데이터가 채널을 명시하지 않습니다.
  • 배경 통계로 들고 있는 CVE 6,580건·KEV 388건·랜섬웨어 확인 98건, CVE-2018-13379·CVE-2021-44228 같은 값은 KISA 보안공지 기반 배경 맥락입니다. 이날 허니팟 관측과 연결된 근거가 없어 본문 사실로 쓰지 않았습니다.
  • C-TAS 신고는 전송 계층에서 성공했다는 것만 확인됩니다. KISA 쪽에 실제로 적재됐는지는 별도 확인이 필요합니다.
  • 이번 대조는 8/16~8/29 원자료 14일치로만 했습니다. 이미 발행한 글과 겹치는지는 확인하지 못했습니다.

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

  • ASN·ISP — 관련 데이터베이스가 없습니다. 유포지 5[.]182[.]210[.]174 · 185[.]93[.]89[.]72 가 어느 사업자에 있는지, 센서 02의 상위 출발지 여섯 곳이 서로 같은 네트워크인지 말할 수 없습니다.
  • 지리정보 — 동일하게 없습니다. 그리고 IP 지리정보는 애초에 귀속 근거가 되지 않습니다. 어떤 국가·기업·개인도 이날의 공격자로 지목하지 않습니다.
  • VPN·Tor·클라우드 여부 — 판별 수단이 없습니다. 183곳·247곳 중 어느 것이 경유지이고 어느 것이 원점인지 구분할 수 없습니다.
  • VirusTotal — 연동돼 있지 않습니다. 이날 검체 10종에 외부 다중 엔진 판정을 붙일 수 없습니다. 검체 분류는 MalwareBazaar 태그를 씁니다.
  • User-Agent — 두 관측면 다 HTTP가 아닙니다. 01은 SSH·텔넷, 02는 SMB·RDP·VNC·MSSQL·LDAP·ADB입니다.
  • CVE 연결 — SSH·텔넷 공격은 특정 취약점을 참조하지 않는 경우가 대부분이고, 센서 02도 프로토콜 협상 단계라 마찬가지입니다.

추정 정리하면 이날은 이렇습니다. 세션 634건, 로그인 시도 251회, 명령 766개. 처음 보는 것은 하나도 없었습니다. 같은 파일이 14일째, 같은 두 주소가 2주째, 같은 도구 지문이 누적 289곳째였습니다.

이런 날 보고서에는 보통 “특이사항 없음”이라고 적힙니다. 틀린 말은 아닙니다. 그런데 현관 앞 전단지도 매일 특이사항이 없습니다. 문제는 전단지가 아니라, 전단지를 밟고 지나가는 동안 아무도 문이 잠겼는지 확인하지 않는다는 쪽입니다.

밟고 지나가는 것과 문을 확인하는 것은 서로 다른 일입니다. 오늘 서버가 한 대라도 있으시면, authorized_keys 파일을 한 번만 열어 보시면 됩니다. 몇 초 걸립니다.

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