107곳이 각자 딱 한 번씩 — 아무도 두 번 만지지 않았다
8월 30일, 서로 다른 출발지 107곳이 똑같은 아이디와 똑같은 비밀번호 하나를 들고 왔습니다. 그런데 한 곳이 두드린 횟수는 평균 1.05회였습니다. 어제 아홉 곳이던 것이 하루 만에 107곳이 됐고, 같은 389바이트짜리 열쇠 파일도 같은 107곳에서 나왔습니다.

학교 복도에 사물함이 쭉 늘어서 있습니다. 자물쇠는 숫자를 돌려 맞추는 방식입니다.
누가 남의 사물함 번호를 알아내려고 한다고 해 봅시다. 한 명이 계속 붙어서 돌리고 있으면 금방 티가 납니다. 지나가던 애가 봅니다. 선생님이 봅니다. “같은 애가 자꾸 그 앞에 서 있으면 걸린다” — 우리가 안전하다고 느끼는 이유가 대개 이겁니다. 자물쇠가 튼튼해서가 아니라, 오래 매달리면 눈에 띄기 때문입니다.
그런데 이렇게 하면 어떻게 될까요. 백 명이 복도를 그냥 지나갑니다. 각자 한 번씩만 돌려 보고 갑니다. 아무도 두 번 만지지 않습니다.
보는 사람 입장에서는 아무 일도 안 일어났습니다. 누구도 수상하게 굴지 않았으니까요.
2026년 8월 30일 하루, 우리 서버에 남은 기록이 정확히 그 모양입니다.
먼저 낯선 말 하나만 풀고 가겠습니다. 허니팟은 일부러 허술하게 만들어 인터넷에 내놓은 미끼 서버입니다. 진짜 업무는 하지 않습니다. 누가 들어와서 무엇을 하는지 통째로 기록하려고 열어 둔 기계입니다. 아래 숫자는 전부 거기에 찍힌 것입니다.
이날 우리가 고른 주제는 숫자 세 개가 겹친 것입니다
사실 이날 우리 허니팟 01에는 서로 다른 출발지 282곳이 들어왔습니다. 그중에서 이런 값 세 개가 나왔습니다.
- 아이디와 비밀번호가 똑같은 문자열
345gs5662d34/345gs5662d34를 던진 곳 — 107곳, 시도 112회 - 389바이트짜리 똑같은 열쇠 파일(
a8460f44…)을 남기고 간 곳 — 107곳, 112회 - 접속 프로그램 지문
f555226df…(SSH-2.0-libssh_0.9.6)가 찍힌 곳 — 106곳
사실 그리고 112회를 107곳으로 나누면 곳당 1.05회입니다. 한 곳이 평균 한 번씩만 두드렸다는 뜻입니다.
추정 107·107·106은 282곳의 각각 37.9%·37.9%·37.6% 입니다. 이날 찾아온 열 곳 중 약 네 곳이 같은 쪽으로 몰려 있었습니다. 같은 도구를 쓰고, 같은 목록을 읽고, 같은 파일을 들고 온 하나의 흩어진 무리가 하루에 몰려온 것으로 읽습니다.
사실 다만 여기서 선을 하나 그어야 합니다. 이 세 값은 우리가 나란히 놓고 본 것이지, 데이터가 서로 묶어 준 것이 아닙니다. 원자료 안에서 “이 107곳과 저 107곳이 같은 곳들”이라고 적어 주는 칸은 없습니다. 크기가 비슷한 서로 다른 세 무리였을 가능성을 배제할 수 없습니다. 이건 말미에서 다시 짚겠습니다.
사실 어제(8월 29일) 같은 자격증명을 던진 곳은 9곳이었습니다. 우리가 확인할 수 있는 8월 16일~29일 구간에서 최댓값은 8월 27일의 26곳입니다. 이날 107곳은 어제의 약 11.9배, 그동안 최댓값의 4.1배입니다.
추정 숫자가 이렇게 뛰면 보통 “공격이 심해졌다”고 씁니다. 그런데 이날의 요점은 세기가 아닙니다. 한 곳이 한 번씩만 했다는 쪽입니다. 복도를 지나가며 한 번씩 돌려 보고 간 것과 같습니다. 규모는 커졌는데, 개별 행동은 오히려 더 얌전해졌습니다.
하루를 시간 순서로
시간 순서로 늘어놓으면 이렇게 됩니다. 줄이 많은데, ’관측 구간 전체’라고 적힌 위쪽 줄들의 숫자가 서로 얼마나 닮았는지만 보시면 됩니다. 아래쪽 다섯 줄은 실제 시각이 찍힌 세션들입니다.
- 사실 허니팟 01(Cowrie, 고상호작용): 세션 1,623건 · 고유 출발지 282곳 · 로그인 시도 1,332회 · 명령 1,686개 · TTY 녹화 982건. 포트 2222(SSH) 1,386 / 2223(텔넷) 237
- 사실 자격증명 345gs5662d34/345gs5662d34(아이디와 비밀번호가 같은 문자열)가 서로 다른 출발지 107곳에서 112회 시도됐다. 곳당 1.05회다
- 사실 389바이트 OpenSSH RSA 공개키(sha256 a8460f44…)가 출처 107곳에서 112회 관측됐다. 받아 온 주소 칸이 비어 있다 — 밖에서 내려받은 것이 아니라 세션 안에서 만들어진 파일이다(8/17 브리프와 같은 판단)
- 추정 위 두 값(107곳·112회 / 107곳·112회)이 완전히 일치한다. 다만 데이터가 두 항목을 서로 연결해 주지 않으므로, 이는 수치가 같다는 뜻이지 같은 집단이라고 확인된 것은 아니다
- 사실 SSH 접속 프로그램 지문 f555226df1963d1d3c09daf865abdc9a(SSH-2.0-libssh_0.9.6)가 이날 106곳, 누적 366곳에서 관측됐다. 어제 브리프의 누적값은 289곳이었으므로 하루에 77곳이 늘었다
- 추정 106곳·107곳은 이날 센서 01 전체 고유 출발지 282곳의 각각 37.6%·37.9%다. 열 곳 중 약 네 곳이 같은 도구·같은 자격증명 쪽에 몰려 있었다는 뜻이다
- 사실 명령 의도 분류: 정찰(시스템) 769 / 실행 권한 부여 186 / 지속성(SSH 키 심기) 116 / 흔적 삭제 114 / 다운로드 후 실행 42 / 파일 다운로드 42 / 방어 무력화 1 / 정찰(네트워크) 1. 전체 명령 1,686개 중 정찰이 45.6%다
- 추정 'SSH 키 심기' 116회와 공개키 파일 관측 112회가 근접한다. 키를 심으려는 시도가 거의 예외 없이 파일 형태로 남았다는 뜻으로 읽힌다
- 사실 인용 기준(서로 다른 IP 3곳 이상)을 넘지 못해 값을 싣지 않은 자격증명 조합이 897종 있다. 확인 구간 최댓값은 아니다(8/18 1,388종, 8/25 1,017종, 8/23 1,007종)
- 사실 문자열 '3245gs5662d34'가 root(48곳)·test(5곳)·daniel(4곳)·inventory(4곳) 네 아이디의 비밀번호로 쓰였다. '345gs5662d34'는 아이디와 비밀번호가 같은 형태다. 두 문자열은 한 글자('2') 차이다
- 사실 ATK-B0D364(211.53.x.x, 텔넷) 로그인 성공. 명령 22개, 파일 11건 저장, TTY 녹화됨. 의도는 '방어 무력화' 하나뿐 — 이날 전체에서 이 의도가 관측된 유일한 1회다. 완결성 42로 이날 최고. 받아간 파일 11건은 전부 1바이트짜리 빈 파일(01ba4719…)이다
- 사실 ATK-1D684D(154.201.x.x, 텔넷) 로그인 성공. 명령 17개, 의도 5종(정찰(시스템)·파일 다운로드·실행 권한 부여·다운로드 후 실행·지속성(SSH 키 심기)), 저장된 파일 0건, TTY 녹화됨
- 사실 ATK-FA7100(183.208.x.x, 텔넷) 로그인 성공. 명령 31개, 의도 3종, 파일 1건. 이 별칭은 306바이트 POSIX 셸 스크립트(a6296a79…, hxxp://185[.]93[.]89[.]72/wget)를 남긴 9개 출처 중 하나다
- 사실 ATK-525D2A(69.165.x.x, 텔넷) 로그인 성공. 명령 17개, 의도 5종, 저장된 파일 0건. 네 시간 전 ATK-1D684D와 명령 수·의도 조합·파일 수가 전부 같다
- 사실 ATK-CA5936(130.12.x.x, SSH) 로그인 성공. 명령은 1개인데 의도가 5종, 파일 2건(399바이트 OpenSSH 개인키 43728fbf… + 54바이트 텍스트 00b6f15c…). 지문 16443846…4397 / SSH-2.0-Go. 8/19·8/24·8/25·8/28 브리프와 별칭·지문·수치가 동일하다
- 사실 접속 프로그램 지문 9종 중 '검체를 실제로 넣고 갔다'로 표시된 것은 16443846184eafde36765c9bab2f4397(SSH-2.0-Go, 이날 3곳·누적 27곳) 하나뿐이다. 이날 출발지 1위인 f555226df…(106곳)는 아니라고 표시돼 있다
- 사실 허니팟 02(Beelzebub+adbhoney, 저상호작용): 접촉 55,925건 · 고유 출발지 250곳. VNC(5900) 53,360건이 전체의 95.4%인데 출처는 45곳뿐이다 — 곳당 평균 1,186회. 반대로 RDP(3389)는 2,139건에 출처 127곳으로 곳당 16.8회다
- 추정 02의 상위 출발지 9곳(각 5,064~7,535건) 합계는 53,291건으로 VNC 접촉 53,360건에 거의 일치하고 02 전체 접촉의 95.3%다. 다만 데이터가 출발지와 서비스를 연결해 주지 않는다
- 사실 02의 VNC 협상에서 상대가 제안한 버전은 003.003이 53,312회, 003.008이 33회다. 프로토콜이 정해 둔 어휘만 기록된 것이며 주고받은 원문은 없다
- 사실 02의 RDP 쿠키 값은 hello 1,458회 · <ip> 501회 · 빈 값 6회, 그리고 9자리 무작위 문자열 3종(udzoENWbp·veuBbKTeU·nYXElrYly)이 각 1회다. SMB 방언 제안 8종 중 SMB 2.???는 2회뿐이고 나머지는 NT LM 0.12 이하의 구버전이다
- 사실 02는 ADB 세션 25건에서 검체 4건(46,525 · 239,388 · 334,816 · 153,208바이트, 합계 773,937바이트)을 확보했다. 같은 날 01이 확보한 검체 6종의 합계는 1,158바이트다
- 추정 02의 검체 4건은 모두 ATK-E23F05 · ATK-1D7F04 두 별칭이 남겼다. 데이터가 이 다운로드가 ADB 경로였는지 명시하지는 않으나, 02에서 파일 내용이 남을 수 있는 통로는 ADB뿐이다
사실 표에서 눈에 걸리는 건 맨 아래 세션입니다. 14:55의 3.64초입니다. 로그인해서 명령을 딱 하나 치고 나갔는데, 그 안에 정찰·다운로드·실행 권한·실행·지속성까지 다섯 가지 의도가 다 들어 있었습니다. 그리고 이 별칭·이 지문·이 수치는 8월 19일, 24일, 25일, 28일 기록과 똑같습니다.
추정 사람이 앉아서 하는 일이 아닙니다. 미리 짜 둔 한 줄이 그대로 재생된 것으로 읽습니다. 01:10과 05:19의 두 세션도 마찬가지입니다. 네 시간 떨어져 있는데 명령 17개, 의도 5종, 저장된 파일 0건이 똑같습니다.
107곳이 들고 온 쪽지는 전부 같은 것이었습니다
사실 이날 로그인 시도는 1,332회입니다. 하루를 꽉 채워 나누면 약 1분에 한 번, 누군가 아이디와 비밀번호를 넣어 봤습니다. 서로 다른 출발지는 282곳입니다.
사실 아래는 그중 서로 다른 IP 3곳 이상에서 관측된 조합만 추린 20종입니다. 한 곳에서만 나온 조합은 실제로 어딘가에서 유출된 진짜 계정일 수 있어서 값을 싣지 않습니다.
| 아이디 | 비밀번호 | 시도한 출발지 수 |
|---|---|---|
345gs5662d34 |
345gs5662d34 |
107곳 |
root |
3245gs5662d34 |
48곳 |
admin |
admin |
25곳 |
root |
root |
6곳 |
root |
12345 |
6곳 |
root |
password |
6곳 |
root |
Password@123 |
5곳 |
root |
admin |
5곳 |
guest |
guest |
5곳 |
test |
3245gs5662d34 |
5곳 |
root |
123456 |
4곳 |
root |
ASDzxc123 |
4곳 |
root |
1234 |
4곳 |
root |
123 |
4곳 |
root |
Oracle@123456 |
4곳 |
root |
123456Cc |
4곳 |
daniel |
danieldaniel |
4곳 |
daniel |
3245gs5662d34 |
4곳 |
inventory |
inventory |
4곳 |
inventory |
3245gs5662d34 |
4곳 |
사실 이 20종 말고, 단일·소수 출처에서만 나온 조합이 897종 더 있습니다. 개수만 적고 값은 쓰지 않습니다. 참고로 이 숫자는 확인 구간 최댓값은 아닙니다(8월 18일 1,388종, 8월 25일 1,017종, 8월 23일 1,007종).
사실
표를 자세히 보면 3245gs5662d34 라는 문자열이 네 줄에 걸쳐 나옵니다. root(48곳)·test(5곳)·daniel(4곳)·inventory(4곳)의 비밀번호로 쓰였습니다. 그리고 맨 윗줄의 345gs5662d34 와는 한 글자(‘2’) 차이입니다.
추정 아무 뜻도 없어 보이는 문자열입니다. 사람이 떠올려서 넣는 값이 아닙니다. 어딘가 돌아다니는 목록을 그대로 읽고 있다는 뜻으로 읽습니다. 한 글자 다른 쌍둥이 문자열이 같은 날 같이 나오는 것도, 그 목록이 여러 판본으로 복사돼 돌아다닌다는 쪽에 가깝습니다.
추정 여기서 이날의 대비가 선명해집니다. 한쪽에는 107곳이 공유하는 조합 하나가 있습니다. 다른 한쪽에는 각각 한두 곳에서만 나온 897종이 있습니다. 복도로 치면, 모두가 같은 쪽지를 들고 있는 무리와, 각자 다른 쪽지를 들고 있는 무리가 같은 날 같은 복도를 지나간 셈입니다.
그리고 사물함 안쪽에 목록을 붙이고 갔습니다
사실
로그인에 성공한 다음 가장 많이 관측된 행동 중 하나가 ‘지속성 — SSH 키 심기’ 116회입니다. 그리고 같은 날 389바이트짜리 똑같은 공개키 파일(a8460f44…)이 107곳에서 112회 나왔습니다.
여기서 말을 두 개 풀고 가겠습니다.
지문(sha256) 은 파일 전체를 계산해서 뽑은 64자리 값입니다. 파일 안의 글자 하나만 달라져도 값이 통째로 바뀝니다. 그래서 두 파일이 같은지 다른지를 이 값으로 판정합니다.
공개키는 이렇습니다. 리눅스 서버에는 authorized_keys(허용된 열쇠 목록)라는 파일이 있습니다. 여기에 공개키 한 줄을 적어 두면, 그 짝을 가진 사람은 비밀번호를 아예 묻지 않고 그냥 들어옵니다. 사물함으로 치면 문 안쪽에 “이 열쇠는 그냥 통과” 라고 적어 붙여 두는 것과 같습니다. 그리고 이게 핵심인데, 번호를 바꿔도 그 종이는 그대로 붙어 있습니다. 비밀번호는 문 앞에서 확인하는 것이고, 이 목록은 서버 안에 저장된 것이라 서로 다른 물건이기 때문입니다.
사실 389바이트는 문자 메시지 두어 줄 정도 되는 크기입니다. 그리고 이 파일의 지문은 8월 16일부터 이날까지 15일 연속 같습니다.
사실 그런데 이 파일을 남기고 간 곳의 수는 계속 흔들렸습니다.
| 날짜 | 남기고 간 출처 수 |
|---|---|
| 8/18 | 16곳 |
| 8/19 | 12곳 |
| 8/23 | 6곳 |
| 8/25 | 21곳 |
| 8/27 | 26곳 |
| 8/29 | 9곳 |
| 8/30 | 107곳 |
사실 이날 107곳은 우리가 확인할 수 있는 범위에서 하루 출처 수 최댓값입니다. 직전 최댓값이던 8월 27일 26곳의 4.1배입니다.
추정 그리고 이 파일에는 받아 온 주소 칸이 비어 있습니다. 밖에서 내려받은 것이 아니라 세션 안에서 만들어진 파일이라는 뜻입니다. 이게 방어하는 쪽에는 성가신 대목입니다. 차단 목록에 올릴 주소가 없습니다. 밖으로 나가는 통신을 다 막아도 이건 안 막힙니다. 문을 여는 데 성공한 그 순간에, 서버 안에서 완결되는 일이기 때문입니다.
추정 키 심기 의도 116회와 실제 파일 112건이 근접합니다. 심으려는 시도가 거의 예외 없이 파일 형태로 남았다는 뜻으로 읽습니다.
도구 지문은 하루 만에 열두 배가 됐습니다
사실 SSH로 들어오는 접속은 프로그램마다 인사말이 조금씩 다릅니다. 그 인사말을 요약한 값을 클라이언트 지문이라고 부릅니다. 어떤 프로그램으로 접속했는지를 가리키는 값입니다.
사실
이날 지문 군집은 43개였습니다. 그중 f555226df1963d1d3c09daf865abdc9a(SSH-2.0-libssh_0.9.6)는 이날 106곳, 누적 366곳에서 관측됐습니다. 어제 같은 값은 이날 9곳, 누적 289곳이었습니다. 하루 만에 그날의 출발지 수가 약 11.8배가 됐고, 누적은 77곳 늘었습니다. 확인되는 지난 값은 8월 19일 10곳, 8월 24일 19곳, 8월 29일 9곳입니다. 106곳은 자릿수가 다릅니다.
사실
그런데 이 지문에는 반대 방향의 값이 하나 붙어 있습니다. 이날 지문 9종 중 ’검체를 실제로 넣고 갔다’로 표시된 것은 16443846…(SSH-2.0-Go) 하나뿐이고, 그쪽은 이날 3곳·누적 27곳입니다. 출발지 1위인 f555226df…(106곳)는 아니라고 표시돼 있습니다.
추정 이 값을 어떻게 읽어야 하는지가 이날의 미해결 지점입니다. 만약 이 표시가 공개키 같은 텍스트 파일까지 포함해서 세는 것이라면, “106곳 무리가 그 공개키를 심었다”는 읽기는 성립하지 않습니다. 정의를 브리프 입력만으로는 알 수 없어, 읽기를 확정하지 않고 그대로 둡니다.
사실 그리고 선을 하나 더 긋습니다. 이건 빌드의 지문이지 사람의 지문이 아닙니다. 같은 배포판에 들어 있는 기본 libssh 0.9.6을 쓰는, 서로 아무 상관 없는 사람도 같은 값을 갖습니다. 그래서 ’같은 도구’라고만 쓰고 ’같은 조직’이라고 쓰지 않습니다.
놓고 간 파일들
받아 적을 값들입니다. 값을 누르면 복사됩니다 — 읽으라고 있는 게 아니라 차단 목록에 넣으라고 있는 값입니다. 주소는 일부러 망가뜨려 적었습니다(hxxp://, [.]). 그대로 복사해 붙여 넣어도 접속되지 않습니다.
a8460f446be540410004b1a8db4083773fa46f7fe76fa84219c93daa1669f8f2389바이트 OpenSSH RSA 공개키. 받아 온 주소 미기록. 이날 출처 107곳·112회. 8/16부터 15일 연속 같은 해시이며, 하루 출처 수로는 확인 범위 최댓값(8/18 16곳 → 8/19 12곳 → 8/23 6곳 → 8/25 21곳 → 8/27 26곳 → 8/29 9곳 → 이날 107곳). 노출된 별칭은 ATK-2D4437·ATK-6E9915·ATK-5BEFFC·ATK-BAEAE9·ATK-0C3344·ATK-6FC532·ATK-FBBAD0·ATK-DD0713·ATK-676891·ATK-6D2EF3 열 곳이고 나머지 97곳은 별칭이 노출되지 않았다01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b1바이트 빈 파일(파일 종류 표식 없음). 출처 1곳·11회. 이날 완결성 1위 세션(ATK-B0D364)이 받아간 파일 11건 전부가 이것이다. 8/17·8/22 브리프의 '들어오기는 했는데 배달에는 실패한 정황'과 같은 해시hxxp://185[.]93[.]89[.]72/wget306바이트 POSIX 셸 스크립트가 놓여 있던 자리. 서로 다른 9곳이 여기서 같은 파일을 끌어갔다a6296a79f44e21b76604d2d2bbf795d2cf380f70e39d45fbf166707ff3b4a6a4위 자리에서 받아간 306바이트 POSIX 셸 스크립트. 별칭 9곳(ATK-5168DD·ATK-B72F17·ATK-4572AE·ATK-722BBC·ATK-BFB306·ATK-982D34·ATK-FA7100·ATK-D62131·ATK-3DA3FF)43728fbfb98bb39ff61a2db0fc2905bd6937997062b05b9ab8b186fdee18c09a399바이트 OpenSSH 개인키. 받아 온 주소 미기록. 출처 1곳·1회(ATK-CA5936). 8/19·8/23·8/24·8/25·8/28과 동일 해시·동일 별칭. 이 파일이 심어진 것인지 서버에서 가져가려던 것인지 데이터가 구분해 주지 않는다00b6f15c2274420217ed3098a9f5f00545bf1793d7a324fd18a7809cbbf5b12b54바이트 텍스트. 출처 1곳·1회(ATK-CA5936). 위 개인키와 같은 별칭·같은 세션 시각대. 내용은 브리프에 담지 않아 무엇인지 판단하지 않는다4af5a5c98ad132095c6fbe7b02c242153a190a01cc321e50a916a0ca46fbaa629바이트 텍스트. 받아 온 주소 미기록. 출처 1곳·8회(ATK-BECAD3)0d3c687ffc30e185b836b99bd07fa2b0d460a090626f6bbbd40a95b98ea70257허니팟 02 · 받아 온 주소 미기록. 46,525바이트. 출처 2곳·4회(ATK-E23F05·ATK-1D7F04). 파일 종류 정보 없음76ae6d577ba96b1c3a1de8b21c32a9faf6040f7e78d98269e0469d896c29dc64허니팟 02 · 받아 온 주소 미기록. 239,388바이트. 출처 2곳·4회(ATK-E23F05·ATK-1D7F04)a1b6223a3ecb37b9f7e4a52909a08d9fd8f8f80aee46466127ea0f078c7f5437허니팟 02 · 받아 온 주소 미기록. 334,816바이트. 이날 두 센서 통틀어 가장 큰 검체다. 출처 2곳·4회(ATK-E23F05·ATK-1D7F04)d7188b8c575367e10ea8b36ec7cca067ef6ce6d26ffa8c74b3faa0b14ebb8ff0허니팟 02 · 받아 온 주소 미기록. 153,208바이트. 출처 2곳·4회(ATK-E23F05·ATK-1D7F04)추정 이 목록을 위에서 아래로 읽으면 주소가 적힌 줄이 딱 하나라는 게 보입니다. 나머지는 전부 ’받아 온 주소 미기록’입니다. 지문은 확보했는데 차단 목록에 올릴 주소가 없다는 뜻입니다. 지문은 파일이 그대로일 때만 쓸모가 있습니다. 안에 한 글자만 바꿔도 값이 통째로 달라집니다.
국제 분류표에 대응시키면
공격자가 쓴 수법에는 전 세계가 같이 쓰는 번호가 붙어 있습니다. MITRE ATT&CK라는 목록입니다. 아래에서 ID를 누르면 원문 설명으로 갑니다 — 우리 말을 믿지 말고 직접 확인해 보시라고 붙여 둡니다.
- T1110Brute Force — 로그인 시도 1,332회. 다만 이날 최대 조합은 곳당 1.05회의 분산형이라 전통적 무차별 대입과 형태가 다르다추정
- T1078Valid Accounts — 완결 세션 5건 전부 로그인 성공추정
- T1082System Information Discovery — '정찰 — 시스템' 769회추정
- T1098.004Account Manipulation: SSH Authorized Keys — '지속성 — SSH 키 심기' 116회 + 389바이트 공개키 112회추정
- T1222.002File and Directory Permissions Modification: Linux and Mac — '실행 권한 부여' 186회추정
- T1105Ingress Tool Transfer — '파일 다운로드' 42회, hxxp://185[.]93[.]89[.]72/wget 9곳추정
- T1059.004Command and Scripting Interpreter: Unix Shell — '다운로드 후 실행' 42회, POSIX 셸 스크립트 검체추정
- T1070Indicator Removal — '흔적 삭제' 114회추정
- T1562Impair Defenses — '방어 무력화' 1회(ATK-B0D364 세션)추정
- T1046Network Service Discovery — '정찰 — 네트워크' 1회. 별개로 허니팟 02의 다섯 개 서비스 접촉도 이 범주로 읽히지만, 출발지와 서비스가 데이터에서 연결되지 않아 단정하지 않는다추정
- T1021.005Remote Services: VNC — 02의 5900 포트 접촉 53,360건. 접촉·협상 단계이며 인증 성공은 존재하지 않는다추정
- T1021.001Remote Services: Remote Desktop Protocol — 02의 3389 포트 접촉 2,139건. 동일하게 접촉 단계다추정
사실 열두 줄 중 가장 큰 숫자는 세 번째, 정찰(시스템) 769회입니다. 이날 명령 1,686개의 45.6% 입니다. 들어와서 한 일의 절반 가까이가 “여기가 어떤 기계인지” 확인하는 작업이었습니다. 그다음이 실행 권한 부여 186회(11.0%), 그리고 키 심기 116회와 흔적 삭제 114회가 거의 같은 규모로 붙어 있습니다.
추정 키를 심는 횟수와 흔적을 지우는 횟수가 두 개 차이로 붙어 있습니다. 침투 도구가 ’다시 들어올 길 만들기’와 ’들어왔던 자국 지우기’를 한 묶음으로 수행하는 형태로 읽습니다.
추정 그리고 열두 줄이 전부 ‘추정’ 배지입니다. 우리가 본 것은 명령의 의도 분류와 개수이지, 공격자가 스스로 밝힌 목적이 아니기 때문입니다.
어제 하루 전체
사실 센서 01(고상호작용 허니팟) 기준입니다.
| 항목 | 2026-08-30 | 견줄 것 |
|---|---|---|
| 세션 | 1,623건 | 하루로 나누면 약 53초에 한 건 |
| 고유 출발지 | 282곳 | 이 중 107곳이 같은 자격증명 쪽에 몰려 있었다 |
| 로그인 시도 | 1,332회 | 약 1분에 한 번씩 문고리를 돌려 봤다 |
| 명령 | 1,686개 | 약 51초에 하나 |
| 포트 2222 (SSH) | 1,386세션 | 전체의 85.4% |
| 포트 2223 (텔넷) | 237세션 | 전체의 14.6% |
| 프로토콜 | SSH 1,386 / 텔넷 237 | 위 포트 수치와 정확히 일치한다 |
| TTY 녹화 | 982건 | — |
| 명령 의도 합계 | 1,271회 | 정찰(시스템) 769 · 실행 권한 186 · SSH 키 심기 116 · 흔적 삭제 114 · 다운로드 후 실행 42 · 파일 다운로드 42 · 방어 무력화 1 · 정찰(네트워크) 1 |
추정 숫자 하나가 어긋나 보입니다. 세션의 85.4%가 SSH인데, 로그인에 성공해서 실제로 일을 한 세션 5건 중 4건은 텔넷입니다. 텔넷은 아주 오래된 원격 접속 방식입니다. 인터넷 너머에서 그 기계의 명령창을 직접 두드릴 수 있게 열어 두는 통로인데, 비밀번호가 암호화되지 않고 그대로 흘러갑니다. 두드리는 건 SSH 쪽이 훨씬 많은데, 안까지 들어와 뭔가를 한 쪽은 텔넷이 많았습니다.
사실 옆에 세워 둔 두 번째 서버(센서 02)의 숫자도 옮겨 둡니다. 이쪽은 저상호작용이라 로그인 성공·명령·자격증명이 애초에 존재하지 않습니다. 세는 것은 ’어느 문을 몇 번 두드렸는가’뿐입니다. 들어온 기록이 아닙니다.
| 서비스 | 포트 | 접촉 | 고유 출발지 | 한 곳당 평균 |
|---|---|---|---|---|
| VNC | 5900 | 53,360건 | 45곳 | 1,186회 |
| RDP | 3389 | 2,139건 | 127곳 | 16.8회 |
| LDAP | 389 | 213건 | 36곳 | 5.9회 |
| SMB | 445 | 151건 | 26곳 | 5.8회 |
| MSSQL | 1433 | 37건 | 5곳 | 7.4회 |
| ADB | — | 세션 25건 | — | 검체 4건 확보 |
사실 전체로는 접촉 55,925건, 고유 출발지 250곳입니다. 하루로 나누면 약 1.5초에 한 번 뭔가가 이 서버를 두드렸습니다.
추정 같은 서버인데 두 문 앞의 그림이 정반대입니다. VNC 쪽은 45곳이 한 곳당 1,186회씩 붙어 있었습니다. 하루로 나누면 한 곳이 73초마다 한 번씩, 하루 종일 같은 문만 붙잡고 있었다는 뜻입니다. RDP 쪽은 127곳이 곳당 17번쯤 지나갔습니다. 소수가 한 문에 매달리는 패턴과, 다수가 얕게 훑는 패턴이 같은 날 같은 서버에 동시에 왔습니다.
사실
프로토콜이 말해 준 것도 있습니다. VNC 접촉 53,360건 중 53,312건이 003.003 버전을 제안했습니다. 최신 쪽인 003.008은 33건뿐입니다. SMB 방언 제안 8종 중 SMB 2.??? 는 2회뿐이고 나머지는 NT LM 0.12 이하의 구버전이었습니다. RDP 접속 쿠키에는 hello 1,458회, <ip> 501회, 빈 값 6회, 그리고 9자리 무작위 문자열 세 종류(udzoENWbp·veuBbKTeU·nYXElrYly)가 각 1회 찍혔습니다.
추정 거의 전부가 같은 낡은 버전을 제안했다는 건 사람 손이 아니라 같은 스크립트가 반복해 두드린 흔적으로 읽습니다. 다만 이 값들은 프로토콜이 정해 둔 어휘일 뿐입니다. 상대의 실제 도구나 의도를 이 값으로 단정하지 않습니다.
사실 파일 크기에서 두 센서가 크게 갈렸습니다. 02는 ADB 세션 25건에서 검체 4건을 확보했고 합계가 773,937바이트입니다. 같은 날 01이 확보한 검체 6종의 합계는 1,158바이트입니다. 668배 차이입니다.
추정 01은 하루 종일 붐볐는데 남은 파일은 거의 없었습니다. 02는 조용한 통로 하나에서 큰 파일 네 개가 나왔습니다. 접촉 수로 위험을 재면 순서가 뒤집힙니다. 다만 이 4건이 무엇인지는 판단하지 않습니다. 파일 종류 정보가 없습니다.
사실 그리고 이날 센서 02에서는 ’한 출발지가 여러 서비스를 함께 훑었는가’를 계산할 수 없습니다. 서비스별 고유 출발지 합(45+127+36+26+5=239)이 전체 고유 출발지 250보다 작아서, 겹침이 있었는지 역산이 안 됩니다. 0으로 쓰면 거짓이 되므로 값 없음으로 뒀습니다.
그래서 뭘 해야 하나
추정 브리프가 정리한 ‘이 통제가 없었다면’ 여섯 가지를, 이날 데이터가 가장 세게 받쳐 주는 순서로 놓습니다.
1. 비밀번호로 여는 문을 열쇠로 여는 문으로 바꾼다 — 이날의 중심입니다. 세션의 85.4%가 SSH였습니다. SSH는 비밀번호 대신 열쇠로만 열게 잠글 수 있는 프로토콜입니다. 비밀번호 인증을 끄고 키 인증만 허용했다면, 이날 107곳이 던진 그 조합 112회는 전부 문 앞에서 끝납니다. 횟수를 세는 방어와, 세는 것 자체를 무의미하게 만드는 방어는 다릅니다.
2. 관리 포트를 인터넷에 그대로 열어 두지 않는다 — 취약점이 없어도 대상이 됩니다. 아무 홍보도 하지 않은 서버에 하루 동안 RDP 127곳·VNC 45곳·LDAP 36곳·SMB 26곳·MSSQL 5곳이 붙었습니다. 두 센서를 합치면 최대 532곳입니다(겹침을 알 수 없어 상한입니다). 관리 포트를 VPN이나 점프호스트 뒤로 옮기거나 접속 가능한 출발지를 제한하면, 이날 관측된 접촉 대부분이 인증 단계에 닿기도 전에 사라집니다.
3. authorized_keys 를 한 번 열어 본다 — 키 심기 116회, 같은 공개키 파일이 107곳에서 112회입니다. 서버를 쓰신다면 ~/.ssh/authorized_keys 파일을 열어 보십시오. 내가 넣은 기억이 없는 줄이 있으면 그게 남의 열쇠입니다. 비밀번호를 바꾸는 것으로는 지워지지 않습니다. 사고 대응에서 비밀번호만 초기화하고 이 파일을 안 보면, ‘조치 완료’ 도장을 찍은 뒤에도 문이 열려 있습니다.
4. 기본 계정과 흔한 비밀번호를 없앤다 — 위 표의 20종은 서로 다른 IP 3곳 이상이 실제로 두드린 조합입니다. 여기에 값을 싣지 않은 897종이 더 있습니다. 이 사전은 특정 조직을 겨냥해 만든 게 아니라 어디에나 통하는 기본값 모음입니다. 표적이 되기 위해 눈에 띌 필요가 없다는 뜻입니다. 이날 관측된 명령 1,686개는 전부 로그인에 성공한 뒤에 실행됐습니다.
5. 서버에서 밖으로 나가는 연결을 제한한다 — 파일 다운로드 42회와 다운로드 후 실행 42회가 정확히 같은 숫자입니다. 내려받은 것은 사실상 예외 없이 실행 단계로 이어졌다는 뜻입니다. 나가는 통신을 기본 차단하고 필요한 목적지만 허용했다면 다운로드 단계에서 끊깁니다. 실제로 이날 완결 세션 5건 중 2건(ATK-1D684D·ATK-525D2A)은 의도상 다운로드까지 갔는데 저장된 파일이 0건이었습니다.
6. ’몇 번 틀리면 잠금’에만 기대지 않는다 — 이날 최대 조합은 곳당 1.05회입니다. ’IP 하나가 N번 실패하면 차단’이라는 방식은 발동 조건에 도달하지도 않습니다. 있었더라도 이 패턴은 못 막았을 가능성이 큽니다. 다만 이건 이 패턴에 한정된 이야기입니다. 반대 근거도 같은 날 데이터에 있습니다. 전체 평균은 곳당 4.7회이고, admin/admin 은 25곳이 46회로 곳당 1.8회입니다. 그리고 센서 02의 VNC는 45곳이 곳당 1,186회였습니다 — 여기서는 빈도 제한이 명백히 효과가 있었을 구간입니다. 그래서 이 항목은 ’버려라’가 아니라 ’이것만으로는 안 된다’입니다.
사실 그리고 5번에 단서를 답니다. 이날의 중심이었던 SSH 키 심기는 밖으로 나가는 연결이 필요 없습니다. 아웃바운드를 다 막아도 이건 안 막힙니다.
7. 로그를 서버 밖에 따로 남긴다 — 흔적을 지우려는 의도가 114회 관측됐습니다. 우리가 위 타임라인을 적을 수 있는 것도, TTY 녹화 982건과 대조할 수 있는 것도 로그가 서버 바깥에 남아 있기 때문입니다. 로그가 그 기계 안에만 있으면, 지워진 뒤에는 지워졌다는 사실조차 안 남습니다.
전에도 있었던 일
추정
Mirai 봇넷(2016년). 텔넷 기본 자격증명 사전 하나로 다수 기기를 장악하고, CPU 종류별로 따로 만든 실행파일을 내려받게 한 사례입니다. 이날 관측된 텔넷 완결 세션 4건, 그리고 압축을 풀어야만 드러나는 지표들의 CPU별 파일명 패턴(parm5·parm6·parm7·pm68k·pmips·pmpsl·pppc·psh4·pspc·x86_64)이 형태상 같은 계열입니다. 다만 우리 관측분이 Mirai 계열이라고 단정할 근거는 없습니다 — 검체에 분류를 붙일 수단(VirusTotal)이 없습니다. (근거: 미국 US-CERT/CISA 경보 TA16-288A, 공개된 소스코드)
추정
FritzFrog P2P SSH 봇넷(2020년). SSH 자격증명 대입으로 들어간 뒤 authorized_keys 에 자기 공개키를 추가해 계속 들어올 길을 확보한 사례입니다. 이날 키 심기 116회와, 같은 해시의 389바이트 공개키가 107곳에서 나온 패턴이 이 기법과 겹칩니다. 기법의 유사성이며 같은 캠페인이라는 근거는 없습니다. (근거: 보안업체 공개 보고서 — Guardicore/Akamai)
우리가 모르는 것
이 글에서 가장 중요한 부분입니다. 위에서 적은 것보다 적지 못한 것이 더 많습니다.
- [핵심] 107곳·107곳·106곳이 같은 집단이라는 확인이 없습니다. 우리가 세 값을 나란히 놓고 관찰한 것이지, 데이터가 서로 묶어 준 사실이 아닙니다. 서로 다른 세 집단의 크기가 우연히 비슷했을 가능성을 배제할 수 없습니다.
- 그리고 위 추정과 충돌하는 근거가 같은 데이터 안에 있습니다. 지문
f555226df…(106곳)는 ’검체를 넣고 갔다’가 아니라고 표시돼 있습니다. 이 표시의 정확한 정의(악성 실행파일만 세는지, 공개키 같은 텍스트 파일도 포함하는지)를 브리프 입력만으로는 알 수 없습니다. 후자를 포함한다면 ’이 무리가 공개키를 심었다’는 읽기는 성립하지 않습니다. - 공개키
a8460f44…의 출처가 26곳(8/27) → 9곳(8/29) → 107곳(이날) 으로 움직인 이유를 데이터로 설명할 수 없습니다. 캠페인이 커진 것인지, 우리 수집 범위가 바뀐 것인지, 봇넷 세대가 교체된 것인지 구분할 근거가 없습니다. - 지문 군집 총계는 어제 45개에서 이날 43개로 줄었는데, 같은 날 최대 군집의 출발지 수는 9곳에서 106곳으로 늘었습니다. 다양성이 줄고 한쪽으로 쏠린 것인지, 집계 기준이 다른 것인지 판단할 수 없습니다.
- 공개키의 해시가 같다는 것은 ’같은 파일’이라는 뜻이지 ’같은 운영자’라는 뜻이 아닙니다. 이 열쇠에 짝이 되는 개인키를 누가, 몇 명이 쥐고 있는지는 데이터에 없습니다.
- 399바이트 개인키(
43728fbf…)가 공격자가 심어 놓은 것인지, 서버에 있던 것을 가져가려 한 것인지 구분되지 않습니다. 다운로드 목록에 있는데 받아 온 주소는 비어 있습니다. 8월 19일 브리프부터 열이틀째 같은 상태입니다. - TTY 녹화 수가 982건과 205건 두 값으로 다르게 적혀 있습니다. 녹화된 것 중 실제 열람 가능한 것이 205건인지, 두 값이 서로 다른 것을 세는지 설명이 없습니다.
- 센서 02에서 한 출발지가 여러 서비스를 함께 훑었는지 계산할 수 없습니다. 서비스별 고유 출발지 합(239)이 전체 고유 출발지(250)보다 작아 겹침을 역산할 수 없습니다.
- 센서 02의 검체 4건이 ADB 통로로 들어온 것인지 데이터가 명시하지 않습니다. 02에서 파일 내용이 남을 수 있는 통로가 ADB뿐이라는 정의에 기댄 추론입니다. 또 이 4건은 파일 종류 정보가 없어 무엇인지 판단하지 않습니다.
- 별도로 확보된 Discord 웹훅 주소가 이날 세션·검체 중 무엇과 연결되는지 알 수 없습니다. 이날 어떤 다운로드의 주소 칸에도 나타나지 않아, 이날 사건과 연결해 서술하지 않았습니다.
- 압축을 풀어야 드러나는 유포 주소 12건은 이날 관측된
hxxp://185[.]93[.]89[.]72/wget과 호스트가 다릅니다. 같은 캠페인인지 확인할 수단이 없습니다. - 배경 통계로 들고 있는 CVE 6,580건·CISA KEV 388건·랜섬웨어 확인 98건은 KISA 보안공지 기반 배경 맥락입니다. 이날 허니팟 관측과 연결된 것이 아닙니다. SSH·텔넷 경로에서 CVE를 참조한 흔적은 관측되지 않았습니다.
- C-TAS 신고는 전송 계층에서 성공했다는 것까지만 확인됩니다. KISA 쪽에 실제로 적재됐는지는 별도 확인이 필요합니다.
- 별칭(
ATK-XXXXXX)은 브리프 사이에서 같은 마스킹 출발지를 가리키는 표식일 뿐 신원이 아닙니다. ATK-CA5936처럼 열흘 넘게 다시 나타나는 별칭도, 그 사이 그 주소를 쓰는 주체가 바뀌었을 가능성을 배제할 수 없습니다. - 두 센서를 합친 고유 출발지 532곳은 상한입니다. 같은 IP가 양쪽에 나타났는지 알 수 없습니다.
- 마지막으로, 허니팟은 문을 열어 주도록 만들어진 서버입니다. 로그인 성공은 ’이 자격증명이 실제 운영 서버에서도 통한다’는 뜻이 아니라 ‘이 자격증명이 시도되고 있다’ 는 뜻입니다.
그리고 아래는 애초에 확인할 수단이 없는 것들입니다. 추정하지 않습니다.
- ASN·ISP — 관련 데이터베이스가 없습니다. 어느 통신사·어느 호스팅 대역인지 확인할 수 없습니다.
- 지리정보 — 동일하게 없습니다. 그리고 IP 지리정보는 애초에 귀속 근거가 되지 않습니다. 어떤 국가·기업·개인도 이날의 공격자로 지목하지 않습니다.
- VPN·Tor·클라우드 여부 — 판별 수단이 없습니다. 282곳·250곳 중 어느 것이 경유지이고 어느 것이 원점인지 구분할 수 없습니다.
- VirusTotal — 연동돼 있지 않습니다. 이날 확보한 검체 10종(01의 6종 + 02의 4종)에 악성코드 계열 이름을 붙일 수 없습니다. 검체 분류는 MalwareBazaar 태그를 씁니다.
- User-Agent — 두 관측면 다 HTTP가 아닙니다. 01은 SSH·텔넷, 02는 SMB·RDP·VNC·MSSQL·LDAP·ADB입니다.
- CVE 연결 — SSH·텔넷 공격은 대부분 특정 취약점을 참조하지 않고 자격증명을 씁니다. 02도 프로토콜 협상 단계라 마찬가지입니다. 이날 어떤 CVE도 이 관측과 연결되지 않습니다.
추정 정리하면 이날은 이렇습니다. 세션 1,623건, 로그인 시도 1,332회, 명령 1,686개. 그리고 서로 다른 107곳이 똑같은 아이디, 똑같은 비밀번호, 똑같은 열쇠 파일 하나를 들고 왔습니다. 한 곳당 1.05회씩입니다.
복도에 서서 오래 붙잡고 있는 사람은 없었습니다. 다들 지나가면서 한 번씩만 돌려 보고 갔습니다. ’같은 애가 자꾸 만지면 걸린다’는 감시는 이날 한 번도 발동할 일이 없었습니다.
그러니 이날 데이터가 가리키는 건 감시를 촘촘하게 하라는 쪽이 아닙니다. 숫자를 세는 것과 문을 바꾸는 것은 다른 일입니다. 서버가 한 대라도 있으시면 오늘 두 가지만 해 보시면 됩니다. ~/.ssh/authorized_keys 를 한 번 열어 보는 것, 그리고 비밀번호로 여는 문을 열쇠로만 열게 잠그는 것. 앞의 것은 몇 초 걸립니다.
관측일은 2026년 8월 30일(UTC) 하루입니다. 출발지 IP는 브리프의 마스킹 형태(211.53.x.x, 130.12.x.x)를 그대로 옮겼고 복원하지 않았습니다. 유포 주소는 접속되지 않도록 변형해 적었습니다(hxxp://, [.]). 자격증명은 서로 다른 IP 3곳 이상에서 관측된 조합 20종만 인용했고, 그 기준을 넘지 못한 조합 897종은 개수만 밝히고 값을 싣지 않았습니다. ASN·국적·행위자 귀속은 확인 수단이 없어 추정하지 않습니다.
