명령은 18.5배 — 뜻이 붙은 건 33개에 하나였다
9월 1일, 우리 서버에 들어온 명령이 하루 만에 760개에서 14,085개가 됐습니다. 그런데 그중 의도가 분류된 것은 422개(3.0%)뿐이고, 실제로 남의 열쇠를 걸어 두고 간 행위는 13번이었습니다. 숫자가 커진 것과 위험해진 것은 같은 말이 아니라서, 이날은 커진 숫자의 정체를 나눠서 적었습니다.

아파트 우편함을 며칠 만에 열어 보면 종이가 한 뭉치 쏟아집니다.
대부분 전단지입니다. 치킨집, 이사 업체, 헬스장. 같은 종이가 두세 장씩 겹쳐 있기도 합니다. 그 사이에 진짜 뜯어봐야 하는 것이 몇 장 섞여 있습니다. 관리비 고지서, 등기 안내서 같은 것들이요.
여기서 질문 하나. 우편함에 종이가 열여덟 배 많아졌다면, 그건 큰일일까요?
답은 “무엇이 열여덟 배가 됐느냐”에 달려 있습니다. 전단지만 열여덟 배가 된 거라면 손목이 좀 아플 뿐입니다. 그런데 그 뭉치 안에 누군가 우리 집 여벌 열쇠를 끼워 넣고 갔다면 이야기가 완전히 달라집니다.
2026년 9월 1일, 우리 서버의 우편함이 딱 그런 상태였습니다.
먼저 낯선 말 하나만 풀고 가겠습니다. 허니팟은 일부러 허술하게 만들어 인터넷에 내놓은 미끼 서버입니다. 진짜 업무는 하지 않습니다. 누가 들어와서 무엇을 하는지 통째로 기록하려고 열어 둔 기계입니다. 아래 숫자는 전부 거기에 찍힌 것입니다.
하루 만에 18.5배가 된 것
사실 먼저 어제와 그제를 나란히 놓겠습니다. 왼쪽이 8월 31일, 오른쪽이 9월 1일입니다.
| 무엇 | 8월 31일 | 9월 1일 | 배수 |
|---|---|---|---|
| 세션(접속 한 건) | 779건 | 3,595건 | 4.62배 |
| 서로 다른 출발지 | 324곳 | 414곳 | 1.28배 |
| 로그인 시도 | 440회 | 3,486회 | 7.92배 |
| 실행된 명령 | 760개 | 14,085개 | 18.53배 |
| 포트 2222 (SSH) | 556세션 | 641세션 | 1.15배 |
| 포트 2223 (텔넷) | 223세션 | 2,945세션 | 13.2배 |
사실 표를 위아래로 훑어보면 배수가 제각각입니다. 명령은 18.53배가 됐는데 찾아온 곳의 수는 1.28배입니다. SSH 쪽 접속은 1.15배로 거의 그대로고, 늘어난 몫은 전부 텔넷에 몰려 있습니다.
여기서 말 두 개를 풀고 가겠습니다. SSH와 텔넷은 둘 다 멀리 있는 컴퓨터에 접속해서 명령을 내리는 방법입니다. 텔넷이 훨씬 오래된 방식인데, 비밀번호가 암호화되지 않고 그대로 흘러갑니다.
사실 이날 세션의 81.9%가 텔넷이었습니다. 2,945건이라는 숫자도, 81.9%라는 비중도 우리가 확인할 수 있는 8월 16일~9월 1일 사이에서 둘 다 최고치입니다. 직전 최고는 8월 26일의 2,945건이 아니라 2,639건이었고, 그날 비중은 48.1%였습니다. 8월 23일은 18.2%, 8월 30일은 14.6%, 8월 31일은 28.6%였습니다.
추정 출발지 한 곳당 세션으로 바꿔 보면 이렇게 됩니다. 3,595 ÷ 414 = 8.68회. 어제는 779 ÷ 324 = 2.40회였습니다. 찾아온 곳은 별로 안 늘었는데, 한 곳이 훨씬 여러 번 왔습니다.
사실 그리고 여기서 이 글이 가장 먼저 밝혀야 할 것을 밝힙니다. 텔넷이 왜 하루 만에 13.2배가 됐는지, 우리는 데이터로 설명하지 못합니다. 새로운 무리가 대거 몰려온 것이라면 출발지 수도 같이 뛰었어야 하는데 1.28배에 그쳤습니다. 소수의 출발지가 반복량을 크게 늘렸을 가능성이 있지만, 원자료에 출발지별 세션 수가 없어서 확인할 수단이 없습니다.
그런데 그 18.5배 중 뜻이 붙은 건 3%였습니다
사실 명령 14,085개가 실행됐습니다. 하루로 나누면 약 6초에 하나씩입니다.
사실 로그인에 성공한 다음 무엇을 했는지는 명령의 ’의도’로 분류해서 셉니다. 이날 분류된 것은 이렇습니다.
| 의도 | 횟수 |
|---|---|
| 실행 권한 부여 | 207회 |
| 정찰 — 시스템 | 144회 |
| 다운로드 후 실행 | 24회 |
| 파일 다운로드 | 24회 |
| 지속성 — SSH 키 심기 | 13회 |
| 흔적 삭제 | 10회 |
| 합계 | 422회 |
사실 합계 422건은 명령 14,085개의 3.0% 입니다. 명령 33개에 하나꼴로만 뜻이 붙었습니다. 나머지 13,663개는 어떤 의도에도 분류되지 않았습니다.
사실 그리고 그 422건 안에서도 쏠림이 있습니다. 위의 두 항목, ’실행 권한 부여’와 ’정찰’이 351건으로 83.2% 를 차지합니다.
말 두 개를 더 풀겠습니다. ‘실행 권한 부여’ 는 내려받은 파일에 “이건 실행해도 되는 프로그램이다”라는 표시를 붙이는 작업입니다. 리눅스에서는 파일을 받아만 놓으면 돌아가지 않습니다. 표시를 따로 붙여야 합니다. ‘정찰’ 은 그 앞 단계로, “여기가 어떤 기계인가”를 둘러보는 작업입니다.
추정 그러니 우편함으로 돌아가면 이렇습니다. 쏟아진 종이가 열여덟 배가 됐지만, 뜯어볼 가치가 있는 건 서른세 장에 한 장이었습니다. 그리고 그 한 장들 중 대부분도 “둘러봤다”, “실행 준비를 했다” 같은 준비 동작이었습니다.
사실 실제로 뭔가가 남는 행위는 훨씬 적습니다. 남의 열쇠를 걸어 두고 간 것이 13번, 다녀간 기록을 지우려 한 것이 10번입니다. 명령 전체로 보면 각각 0.09%와 0.07% 입니다.
추정 그래서 이날 숫자를 읽는 방법은 이렇습니다. “명령이 18배 늘었다”를 “공격 행위가 18배 늘었다”로 옮겨 적으면 틀립니다. 늘어난 것의 대부분이 무엇이었는지 우리는 모릅니다. 우리가 셀 수 있었던 실제 침해 행동은 13번과 10번입니다.
하루를 시간 순서로
시간 순서로 늘어놓으면 이렇게 됩니다. 줄이 많은데 전부 읽지 않으셔도 됩니다. 실제 시각이 찍힌 다섯 줄만 보시면 됩니다 — 걸린 시간과 명령 개수가 서로 얼마나 닮았는지, 그리고 유독 한 줄만 얼마나 짧은지가 이날의 핵심입니다.
- 사실 허니팟 01 세션 3,595건 · 고유 출발지 414곳 · 로그인 시도 3,486회 · 명령 14,085개 · TTY 녹화 2,980건. 포트별로 2223(텔넷) 2,945 · 2222(SSH) 641 이다
- 사실 8/31 브리프의 01 집계는 세션 779 · 고유 IP 324 · 로그인 시도 440 · 명령 760 · 2222 556 이었다. 오늘 세션 4.62배 · 로그인 시도 7.92배 · 명령 18.53배인데, 고유 출발지는 1.28배, SSH 세션은 1.15배에 그친다. 증가분은 텔넷(223→2,945, 13.2배)에 몰려 있다
- 사실 ATK-D3BC49(220.132.x.x, 텔넷) 로그인 성공. 67초 동안 명령 31개, 의도 3종(파일 다운로드 · 다운로드 후 실행 · 실행 권한 부여), 다운로드 1건, TTY 녹화됨. 텔넷이라 접속 프로그램 지문은 빈 문자열이다
- 사실 ATK-20A6CD(147.139.x.x, 텔넷) 로그인 성공. 61초 동안 명령 17개, 의도 5종(정찰 — 시스템 · 파일 다운로드 · 다운로드 후 실행 · 실행 권한 부여 · 지속성 — SSH 키 심기). 의도는 5단계가 다 찍혔는데 다운로드 수는 0이다
- 사실 ATK-80C958(125.228.x.x, 텔넷) 로그인 성공. 67초 · 명령 31개 · 의도 3종 · 다운로드 1건으로, 두 시간 전 ATK-D3BC49 와 명령 수·의도 조합·지속시간(67초)이 모두 일치한다
- 사실 ATK-CA5936(130.12.x.x, SSH) 로그인 성공. 3.8초 · 명령 1개인데 의도 5종 · 다운로드 2건(399바이트 OpenSSH 개인키 43728fbf… + 54바이트 ASCII 00b6f15c…), 지문 16443846…4397 / SSH-2.0-Go. 완결성 19 로 오늘 1위다
- 사실 ATK-8120D7(34.150.x.x, 텔넷) 로그인 성공. 62초 · 명령 17개 · 의도 5종 · 다운로드 0건으로, 아홉 시간 전 ATK-20A6CD 와 명령 수·의도 조합이 일치한다
- 사실 command_intents 합계는 422건이다 — 실행 권한 부여 207 · 정찰(시스템) 144 · 다운로드 후 실행 24 · 파일 다운로드 24 · 지속성(SSH 키 심기) 13 · 흔적 삭제 10. 명령 14,085개 중 의도로 분류된 것은 3.0%이고, 그 422건의 83.2%(351건)가 앞의 두 항목이다
- 사실 저장된 검체는 7종 1,175바이트가 전부다(389+306+9+9+9+399+54). ELF 실행 바이너리는 0건이다. 전달 횟수 합계는 28회다
- 사실 SSH 클라이언트 지문 9종이 기록됐다. 1위 acaa53e0a7d7ac7d1255103f37901306(SSH-2.0-OpenSSH_7.4)은 오늘 233곳 · 누적 758곳으로, 오늘 01 고유 IP 414곳의 56.3%다. 아카이브 기록치는 8/25 125곳 · 8/27 206곳 · 8/31 113곳이었다
- 사실 접촉 54,779건 · 고유 출발지 315곳. VNC 52,441(95.7%) · RDP 2,030 · SMB 225 · MSSQL 50 · LDAP 11 이며 ADB 세션 22건, 저장된 검체 0건이다
- 사실 8/31 브리프의 VNC 는 53,310건 · 고유 IP 46곳이었다. 오늘은 52,441건 · 78곳으로 접촉량은 1.6% 줄었는데 출발지는 69.6% 늘었다 — 출발지 한 곳당 1,159회에서 672회로 떨어졌다
- 사실 VNC 협상에서 상대가 제안한 버전은 003.003 이 52,078회 · 003.008 이 240회다(기록된 값의 99.54%가 낮은 쪽). 8/31 의 003.008 은 34회였으므로 오늘 7.06배다. SMB 방언 제안 334건은 전부 SMB1 계열이고 'SMB 2.???' 제안은 0건이다 — 8/26·8/31 에는 각 2건 있었다. 'Samba' 방언 문자열 1건은 아카이브 16일치에 없던 값이다
- 사실 RDP 쿠키는 hello 1,473 · <ip> 426 · (empty) 3 · Test 2 · Administr 2 · zgrab 1 이다. hello 는 8/26 의 604 에서 2.4배가 됐다
사실 실제 시각이 찍힌 다섯 줄을 다시 보십시오. 텔넷 네 건이 67초 · 61초 · 67초 · 62초입니다. 그리고 이 네 건은 두 쌍으로 딱 갈라집니다. 명령 31개·의도 3종·다운로드 1건짜리가 두 건(00시 28분, 02시 41분), 명령 17개·의도 5종·다운로드 0건짜리가 두 건(00시 35분, 09시 50분)입니다. 각 쌍은 걸린 시간까지 거의 같습니다.
추정 사람이 앉아서 하는 일이 아닙니다. 서로 다른 출발지가 몇 시간 간격으로 똑같은 개수의 명령을 똑같은 순서로 칠 확률은 사실상 없습니다. 미리 짜 둔 같은 스크립트가 재생된 것으로 읽습니다. 다만 네 건 다 텔넷이라 접속 프로그램의 지문 자체가 존재하지 않습니다. “같은 도구였다”를 지문으로 확인할 방법이 이날 텔넷 세션에는 없습니다.
사실 그리고 유독 짧은 줄이 하나 있습니다. 06시 39분 24초부터 27초까지, 3.8초. 명령은 딱 한 개입니다. 그런데 이 한 건에서 의도는 5종이 찍혔고 파일은 2개가 오갔습니다. 이날 완결성 점수 1위(19점)입니다.
추정 전단지 뭉치로 치면, 가장 얇은 봉투가 가장 무거웠습니다. 62초짜리 네 건보다 3.8초짜리 한 건이 더 많은 것을 남겼습니다.
이 비밀번호 쓰고 계십니까
사실 이날 로그인 시도는 3,486회입니다. 하루를 꽉 채워 나누면 약 25초에 한 번, 누군가 아이디와 비밀번호를 넣어 봤습니다. 어제는 3분 16초에 한 번이었습니다.
사실 아래는 그중 서로 다른 IP 3곳 이상에서 관측된 조합만 추린 20종입니다. 횟수 칸은 브리프에 횟수까지 적힌 것만 채웠습니다.
| 아이디 | 비밀번호 | 출발지 수 | 시도 횟수 |
|---|---|---|---|
admin |
admin |
19곳 | 160회 |
345gs5662d34 |
345gs5662d34 |
9곳 | 9회 |
root |
123456 |
7곳 | 117회 |
root |
12345 |
7곳 | 98회 |
root |
root |
6곳 | — |
root |
666666 |
6곳 | — |
root |
password |
5곳 | — |
root |
1111 |
5곳 | — |
root |
3245gs5662d34 |
5곳 | 5회 |
root |
xc3511 |
4곳 | 218회 |
root |
vizxv |
4곳 | 208회 |
root |
admin |
4곳 | — |
root |
(빈 비밀번호) | 4곳 | 93회 |
root |
1234 |
4곳 | — |
admin |
password |
4곳 | — |
admin |
1111 |
4곳 | — |
admin |
123456 |
4곳 | — |
support |
support |
4곳 | — |
enable\x00 |
linuxshell\x00 |
3곳 | 194회 |
root |
default |
3곳 | — |
사실
맨 아래에서 두 번째 줄의 \x00 은 눈에 보이지 않는 문자를 글로 적을 때 쓰는 표기입니다. 사람이 손으로 칠 수 있는 형태가 아닙니다.
추정
1위와 2위가 눈에 걸립니다. root/xc3511 218회, root/vizxv 208회. 둘 다 특정 제조사 장비에 공장에서 붙여 나온 기본 비밀번호 계열입니다. 사람이 떠올려서 치는 문자열이 아닙니다. 목록을 들고 온 프로그램이 순서대로 던진 것으로 읽습니다. 위쪽 세 조합만 합쳐도 620회입니다.
사실 그리고 이날 관측된 아이디·비밀번호 조합은 전부 337개였습니다. 위 표에 실린 것은 20개입니다. 나머지 317개는 개수만 세고 값을 싣지 않았습니다.
우편함 이야기로 돌아가겠습니다. 우편함에 남의 이름이 적힌 편지가 잘못 들어와 있으면 우리는 그걸 열지 않습니다. 몇 통인지만 세고 관리사무소에 넘깁니다.
추정 317개가 정확히 그렇습니다. 한두 곳에서만 나온 조합은 어딘가에서 실제로 유출된 진짜 누군가의 계정일 수 있습니다. 여기 옮겨 적으면 그 사람에게 두 번째 피해를 주는 일입니다. 그래서 개수만 셉니다. 참고로 317개는 8월 29일의 142개에 견주면 2.2배입니다.
추정 그런데 여기에 이날 가장 이상한 비율이 숨어 있습니다. 공개한 20개는 조합 수로는 5.9%인데, 시도 횟수로는 1,916회로 전체 3,486회의 55.0%입니다. 조합의 스무 개 남짓이 시도의 절반 이상을 만들어 냅니다. 누구의 것도 아닌 기본값 사전이 이 서버를 두드린 힘의 절반이었다는 뜻입니다.
사실
표 안에 서로 다른 두 가지 형태가 섞여 있는 것도 짚어 둡니다. root/xc3511 은 4곳이 218회를 던졌습니다. 한 곳당 54.5회입니다. 반대로 345gs5662d34/345gs5662d34 는 9곳이 9회, 한 곳당 정확히 한 번입니다. 이 차이는 뒤의 ’뭘 해야 하나’에서 다시 쓰겠습니다.
놓고 간 것은 1,175바이트가 전부입니다
사실 이날 서버에 실제로 남은 파일은 7종, 합계 1,175바이트입니다. 짧은 문자 메시지 예닐곱 줄 정도 되는 양입니다. 실행 바이너리, 그러니까 진짜로 돌아가는 악성 프로그램 파일은 0종입니다.
받아 적을 값들입니다. 값을 누르면 복사됩니다 — 읽으라고 있는 게 아니라 차단 목록에 넣으라고 있는 값입니다. 주소는 일부러 망가뜨려 적었습니다(hxxp://, [.]). 그대로 복사해 붙여 넣어도 접속되지 않습니다.
a8460f446be540410004b1a8db4083773fa46f7fe76fa84219c93daa1669f8f2389바이트 OpenSSH RSA 공개키. 받아 온 주소 미기록. 오늘 서로 다른 별칭 10곳에서 10회(ATK-D09872 · ATK-B7B121 · ATK-A359AB · ATK-39D838 · ATK-B57938 · ATK-3F9EC4 · ATK-408329 · ATK-77933F · ATK-32DC41 · ATK-78CA04). 8/16 · 8/19 · 8/25 · 8/27 · 8/29 브리프에 같은 해시가 있고, 8/16 기준으로 오늘이 17일째다a6296a79f44e21b76604d2d2bbf795d2cf380f70e39d45fbf166707ff3b4a6a4306바이트 셸 스크립트. 문자 메시지 두 줄 정도 되는 크기다. 별칭 7곳(ATK-FE68AF · ATK-3E998C · ATK-80C958 · ATK-D3BC49 · ATK-338C04 · ATK-E45C5B · ATK-C0DC14)이 같은 파일을 끌어갔고, 이 중 ATK-80C958 · ATK-D3BC49 는 오늘 완결된 텔넷 세션 두 건이다hxxp://185[.]93[.]89[.]72/wget위 셸 스크립트가 놓여 있던 자리. 오늘 관측된 유일한 다운로드 호스트다43728fbfb98bb39ff61a2db0fc2905bd6937997062b05b9ab8b186fdee18c09a399바이트 OpenSSH 개인키. 받아 온 주소 미기록. 출처 1곳·1회(ATK-CA5936). 8/19 · 8/24 · 8/25 · 8/28 · 8/30 브리프와 해시도 별칭도 같다. 심어진 것인지 가져가려던 것인지 원자료가 구분해 주지 않는다00b6f15c2274420217ed3098a9f5f00545bf1793d7a324fd18a7809cbbf5b12b54바이트 ASCII 텍스트. 짧은 문장 한 줄 분량이다. 위 개인키와 같은 별칭·같은 세션이며 8/19 이후 반복 관측된 해시다. 내용이 브리프에 없어 무엇인지 판단하지 않는다4af5a5c98ad132095c6fbe7b02c242153a190a01cc321e50a916a0ca46fbaa629바이트 ASCII 텍스트. 글자 아홉 개 분량이다. 출처는 ATK-BECAD3 한 곳인데 횟수 칸은 7 로 적혀 있다 — 두 값이 어긋나 횟수는 해석하지 않는다1193dde1c831808bf6f2db6f5b850b846b8a7f870873ec3b8a347f21cc5d96e39바이트 ASCII 텍스트. 출처 1곳·1회(ATK-09D9F8)a9b1c85a7bd78dd1112ecc75c9070ea8c53078831a17aa09ebeb287fe6e21b729바이트 ASCII 텍스트. 바로 위와 같은 별칭 ATK-09D9F8 이 같은 크기의 다른 파일을 남겼다사실 여덟 줄 중 주소가 적힌 줄은 하나뿐입니다. 나머지는 전부 ’받아 온 주소 미기록’입니다. 차단 목록에 올릴 주소가 하나밖에 남지 않았다는 뜻입니다.
여기서 두 가지를 풀고 가겠습니다.
지문(sha256) 은 파일 전체를 계산해서 뽑은 64자리 값입니다. 파일 안의 글자 하나만 달라져도 값이 통째로 바뀝니다. 그래서 두 파일이 같은지 다른지를 이 값으로 판정합니다.
공개키는 이렇습니다. 리눅스 서버에는 authorized_keys(허용된 열쇠 목록)라는 파일이 있습니다. 여기에 공개키 한 줄을 적어 두면, 그 짝을 가진 사람은 비밀번호를 아예 묻지 않고 그냥 들어옵니다. 쉽게 말해 비밀번호 없이 들어올 수 있는 여벌 열쇠를 우편함에 하나 넣어 두는 겁니다. 그리고 중요한 건, 비밀번호를 바꿔도 그 열쇠는 그대로 남아 있습니다.
추정 맨 윗줄의 389바이트짜리가 그 열쇠입니다. 방어하는 쪽에는 성가신 물건입니다. 받아 온 주소가 없으니 막을 주소가 없습니다. 서버가 밖으로 나가는 통신을 전부 차단해도 이건 안 막힙니다. 문이 열린 그 순간에, 서버 안에서 끝나는 일이기 때문입니다.
국제 분류표에 대응시키면
공격자가 쓴 수법에는 전 세계가 같이 쓰는 번호가 붙어 있습니다. MITRE ATT&CK라는 목록입니다. 아래에서 ID를 누르면 원문 설명으로 갑니다 — 우리 말을 믿지 말고 직접 확인해 보시라고 붙여 둡니다.
- T1110.001Brute Force: Password Guessing — 로그인 시도 3,486회 · 자격증명 조합 337개(공개 20 / 미공개 317)추정
- T1078.001Valid Accounts: Default Accounts — admin/admin 19개 IP·160회, root/123456 7개 IP·117회 등 공장 기본값 계열추정
- T1082System Information Discovery — command_intents '정찰 — 시스템' 144회추정
- T1105Ingress Tool Transfer — '파일 다운로드' 24회, 306바이트 셸 스크립트가 hxxp://185[.]93[.]89[.]72/wget 에서 별칭 7곳에 전달추정
- T1222.002File and Directory Permissions Modification: Linux — '실행 권한 부여' 207회로 오늘 최다 의도추정
- T1098.004Account Manipulation: SSH Authorized Keys — '지속성 — SSH 키 심기' 13회, 389바이트 공개키가 별칭 10곳에서 관측추정
- T1070Indicator Removal — '흔적 삭제' 10회. 명령 14,085개 대비 0.07%다추정
- T1046Network Service Discovery — 허니팟 02 에서 VNC·RDP·SMB·MSSQL·LDAP 5개 서비스에 접촉 54,779건. 접촉과 프로토콜 협상까지만 관측됐다추정
- T1021.005Remote Services: VNC — 접촉 52,441건이나 저상호작용 센서라 인증 성공도 세션 확립도 관측되지 않았다. 버전 협상 제안값까지가 전부다추정
사실 아홉 줄 중 가장 큰 숫자는 맨 윗줄, 로그인 시도 3,486회입니다. 그리고 가장 작은 숫자는 여섯 번째 줄, 키 심기 13회입니다. 이 글이 처음부터 이야기한 간격이 여기에도 그대로 나옵니다.
추정 아홉 줄이 전부 ‘추정’ 배지입니다. 우리가 본 것은 명령의 의도 분류와 개수이지, 공격자가 스스로 밝힌 목적이 아니기 때문입니다.
어제 하루 전체
사실 센서 01(고상호작용 허니팟) 기준입니다.
| 항목 | 2026-09-01 | 견줄 것 |
|---|---|---|
| 세션 | 3,595건 | 하루로 나누면 약 24초에 한 건 |
| 고유 출발지 | 414곳 | 어제 324곳에서 1.28배 |
| 곳당 세션 | 8.68회 | 어제는 2.40회였다 |
| 로그인 시도 | 3,486회 | 약 25초에 한 번씩 문고리를 돌려 봤다. 어제는 3분 16초에 한 번 |
| 명령 | 14,085개 | 약 6초에 하나. 8/26 의 14,344개에 이어 두 번째로 많다 |
| 세션당 명령 | 3.92개 | 8/26 은 2.61개, 8/31 은 0.98개였다 |
| 포트 2223 (텔넷) | 2,945세션 | 전체의 81.9%. 건수도 비중도 16일 중 최고 |
| 포트 2222 (SSH) | 641세션 | 전체의 17.8%. 어제 556에서 1.15배 |
| TTY 녹화 | 2,980건 | 세션의 82.9% |
| 명령 의도 합계 | 422회 | 전체 명령의 3.0%. 나머지 13,663개는 분류되지 않았다 |
| 확보 검체 | 7종 · 1,175바이트 | 실행 바이너리 0종. 전달 횟수 합계 28회 |
사실 표에 어긋난 값이 하나 있습니다. 포트별 합계 3,586(2,945 + 641)이 세션 3,595보다 9 적습니다. 포트가 기록되지 않은 세션이 있다는 뜻으로 보이지만, 이유는 원자료에 없습니다.
사실 옆에 세워 둔 두 번째 서버(센서 02)의 숫자도 옮겨 둡니다. 이쪽은 저상호작용이라 로그인 성공·명령·자격증명이 애초에 존재하지 않습니다. 세는 것은 ’어느 문을 몇 번 두드렸는가’뿐입니다.
| 서비스 | 포트 | 접촉 | 고유 출발지 | 한 곳당 평균 |
|---|---|---|---|---|
| VNC | 5900 | 52,441건 | 78곳 | 672회 |
| RDP | 3389 | 2,030건 | 161곳 | 12.6회 |
| SMB | 445 | 225건 | 43곳 | 5.2회 |
| MSSQL | 1433 | 50건 | 14곳 | 3.6회 |
| LDAP | 389 | 11건 | 7곳 | 1.6회 |
| ADB | — | 세션 22건 | — | 확보 검체 0건 |
사실 전체로는 접촉 54,779건, 고유 출발지 315곳입니다. 하루로 나누면 약 1.6초에 한 번 뭔가가 이 서버를 두드렸습니다. 위 여섯 줄의 합이 총계와 정확히 맞습니다.
사실 VNC 쪽에서 어제와 달라진 것이 있습니다. 어제는 53,310건을 46곳이 만들었습니다(곳당 1,159회). 이날은 52,441건을 78곳이 만들었습니다(곳당 672회). 두드린 양은 1.6% 줄었는데 두드린 곳은 69.6% 늘었습니다.
추정 같은 물량을 더 많은 곳이 나눠서 쳤다는 뜻으로 읽힙니다. 다만 원자료가 출발지와 서비스를 연결해 주지 않아 그 이상은 말하지 않습니다.
사실 프로토콜이 말해 준 것도 있습니다. 프로토콜 어휘란 접속하는 쪽이 “나는 이 버전으로 말하겠다”고 먼저 제안하는 값입니다.
- VNC에서 상대가 제안한 버전은
003.003이 52,078회,003.008이 240회입니다. 기록된 값의 99.54%가 낮은 쪽입니다. 다만003.008은 어제 34회에서 7.06배가 됐습니다. - SMB 방언 제안 334건은 전부 SMB1 계열이고
SMB 2.???제안은 0건입니다. 8월 26일과 31일에는 각각 2건이 있었습니다.Samba라는 방언 문자열 1건은 16일치 기록에 없던 값입니다. - RDP 접속 쿠키는
hello1,473회,<ip>426회, 빈 값 3회,Test2회,Administr2회,zgrab1회입니다.hello는 8월 26일의 604회에서 2.4배가 됐습니다.
추정
hello 와 <ip> 는 사람이 친 사용자명이 아니라 도구가 자동으로 채워 넣은 자리표시자로 읽힙니다. 다만 어느 도구인지는 이 값으로 특정되지 않습니다.
233곳이 같은 지문이지만, 같은 무리는 아닙니다
사실 SSH로 들어오는 접속은 프로그램마다 첫 인사말이 조금씩 다릅니다. 그 인사말을 요약한 값을 클라이언트 지문이라고 부릅니다. 어떤 프로그램으로 접속했는지를 가리키는 값입니다.
사실
이날 지문은 9종이 목록에 실렸습니다. 1위는 acaa53e0a7d7ac7d1255103f37901306(SSH-2.0-OpenSSH_7.4)로 이날 233곳, 누적 758곳입니다. 이날 01 전체 출발지 414곳의 56.3% 입니다. 기록된 값으로는 8월 25일 125곳, 8월 27일 206곳, 8월 31일 113곳이었습니다.
추정 숫자만 보면 “233곳이 한 무리”라고 쓰고 싶어집니다. 쓰지 않습니다. 이 값은 널리 쓰이는 리눅스 배포판에 그냥 들어 있는 기본 OpenSSH 7.4 클라이언트 문자열입니다. 서로 아무 상관 없는 사람들이 같은 값을 갖는 게 정상입니다.
사실 그래서 말할 수 있는 건 “233곳이 같은 도구를 쓴다” 까지입니다. “233곳이 한 조직이다” 는 이 데이터로 성립하지 않습니다. 참고로 이날 이 지문에는 ‘검체를 넣고 갔다’ 표시가 붙어 있지 않습니다.
그래서 뭘 해야 하나
추정 브리프가 정리한 ‘이 통제가 없었다면’ 여섯 가지를, 이날 데이터가 가장 세게 받쳐 주는 순서로 놓습니다.
1. 관리 포트를 인터넷에 그대로 열어 두지 않는다 — 이날의 1순위입니다. 아무 홍보도 하지 않은 서버에 하루 동안 414곳이 접촉했고, 옆 서버에는 RDP 161곳·VNC 78곳·SMB 43곳·MSSQL 14곳·LDAP 7곳이 붙었습니다. 두 서버를 합치면 최대 729곳입니다(겹침을 알 수 없어 상한입니다). VNC 한 포트에서만 52,441건, 하루 평균 초당 0.6회가 들어왔습니다. 원격 접속 창구를 VPN이나 허용 IP 뒤로 옮기면 이 시도량 전체가 인증 단계에 닿기도 전에 사라집니다. 노출 자체가 시도량을 결정합니다.
2. 기본 계정과 흔한 비밀번호를 없앤다 — 이날 완결된 세션 5건은 전부 로그인에 성공했습니다. 그리고 앞의 표 20종만으로 시도 1,916회, 전체의 55.0%가 설명됩니다. 전부 공장 기본값이거나 네 자리 숫자입니다. 성공한 뒤에 걸린 시간을 보십시오. 6267초 안에 명령 1731개, 한 건은 3.8초입니다. 사람이 알아차릴 시간이 없습니다.
3. 비밀번호로 여는 문을 열쇠로 여는 문으로 바꾼다 — 이날 세션의 81.9%가 텔넷입니다. 텔넷에는 열쇠 인증이라는 선택지 자체가 없고, 자격증명이 암호화되지 않은 채 흘러갑니다. 그러니 텔넷 쪽에서 할 일은 ’열쇠를 쓰자’가 아니라 ‘그 서비스를 끄자’ 입니다. 그리고 반대 방향도 있습니다. 비밀번호로 한 번 들어온 뒤 공격자 소유의 공개키를 심으면, 그 뒤로는 비밀번호를 바꿔도 접근이 유지됩니다. 이날 그 공개키를 남긴 출발지가 10곳입니다.
4. 서버에서 밖으로 나가는 연결을 제한한다 — ‘파일 다운로드’ 24회와 ‘다운로드 후 실행’ 24회가 정확히 같은 숫자입니다. 내려받은 것은 예외 없이 실행 단계로 이어졌다는 뜻입니다. 나가는 통신을 기본으로 막고 필요한 목적지만 허용했다면 다운로드 단계에서 끊깁니다. 다만 이날은 306바이트짜리 로더 스크립트까지만 회수됐고, 그 로더가 부르는 다음 파일은 한 건도 잡히지 않았습니다. 1단계는 봤고 2단계는 못 봤습니다.
5. ’몇 번 틀리면 잠금’에만 기대지 않는다 — 앞의 표에 서로 다른 두 형태가 있다고 했습니다. root/xc3511 은 4곳이 218회, 곳당 54.5회입니다. 이런 반복형은 횟수 기준 차단이 확실히 걸립니다. 그런데 345gs5662d34 는 9곳이 각각 딱 한 번, root/3245gs5662d34 는 5곳이 각각 딱 한 번입니다. 이 분산형은 횟수 임계에 아예 도달하지 않습니다. 그래서 이 항목은 ’버려라’가 아니라 ’이것만으로는 안 된다’입니다. 차단 로그가 늘어난 만큼 안전해졌다고 읽으면 안 됩니다.
6. 로그를 서버 밖에 따로 남긴다 — 흔적을 지우려는 의도가 이날 10회 관측됐습니다. 명령 전체의 0.07%로 작은 숫자이고, 8월 25일의 70회보다 크게 낮습니다. 그래도 관측은 됐습니다. 우리가 이 10건을 셀 수 있는 이유는 로그가 허니팟 바깥에 따로 쌓이기 때문입니다. 운영 서버라면 로그를 다른 시스템으로 즉시 내보내야 같은 것을 볼 수 있습니다.
사실
그리고 4번에 단서를 답니다. SSH 키 심기는 밖으로 나가는 연결이 필요 없습니다. 나가는 통신을 다 막아도 이건 안 막힙니다. 서버를 쓰신다면 ~/.ssh/authorized_keys 파일을 한 번 열어 보십시오. 내가 넣은 기억이 없는 줄이 있으면 그게 남의 열쇠입니다. 비밀번호를 바꾸는 것으로는 지워지지 않습니다.
전에도 있었던 일
추정
Mirai 봇넷(2016년). 텔넷과 장비 공장 기본 계정 사전을 이용해 IoT 기기를 대량 감염시킨 사례입니다. 이날 관측의 두 축과 형태가 같습니다. 세션의 81.9%가 텔넷이고, 시도 최다 비밀번호 두 개(xc3511 218회, vizxv 208회)가 특정 제조사 장비의 공장 기본값 계열입니다. 완결 세션들의 행동 순서도 정찰 → 다운로드 → 실행 권한 부여 → 지속성으로 같은 형틀입니다. 다만 이날 관측을 Mirai로 귀속하는 것이 아닙니다. 접근 방식이 같은 계열이라는 대조입니다. 감염 대수나 피해 금액 같은 수치는 인용하지 않습니다. (근거: 공개된 소스코드, 미국 US-CERT/CISA 경보, 여러 벤더의 공개 사고 분석 보고서)
추정
WannaCry(2017년). SMBv1 취약점(MS17-010 / CVE-2017-0144)을 이용해 확산된 사례입니다. 배경 맥락으로만 씁니다. 이날 허니팟 02의 SMB 방언 제안 334건은 전부 SMB1 계열(NT LM 0.12, LANMAN1.0, LM1.2X002, PC NETWORK PROGRAM 1.0, Windows for Workgroups 3.1 등)이고 SMB 2.??? 제안은 0건이었습니다. 말을 거는 어휘 자체가 구형에 맞춰져 있다는 뜻입니다. SMBv1이 대규모 사고의 무대였다는 사실은 공개 자료로 검증되지만, 이날 관측은 방언 협상 단계까지이며 취약점 공격 시도가 확인된 것이 아닙니다. (근거: 마이크로소프트 보안 공지 MS17-010, CVE, 공개 사고 분석 보고서)
우리가 모르는 것
이 글에서 가장 중요한 부분입니다. 위에서 적은 것보다 적지 못한 것이 더 많습니다.
- [핵심] 텔넷이 하루 만에 13.2배로 튄 이유를 데이터로 설명할 수 없습니다. 고유 출발지는 1.28배(324→414)밖에 늘지 않았으므로 ’새로운 공격자가 대거 들어왔다’로는 설명되지 않습니다. 소수의 출발지가 반복량을 크게 늘렸을 가능성이 있으나, 원자료에 01의 출발지별 세션 수가 없어 확인할 수 없습니다.
- [핵심] 명령 14,085개 중 의도로 분류된 것은 422건(3.0%)뿐입니다. 나머지 13,663개가 분류 규칙에 걸리지 않은 것인지, 의도 없는 반복·오타·프롬프트 노이즈인지 원자료가 밝히지 않습니다. ’명령이 18배 늘었다’를 ’공격 행위가 18배 늘었다’로 읽으면 안 됩니다 — 실제 지속성 확보 시도는 13회, 흔적 삭제는 10회입니다.
- TTY 녹화 수가 2,980과 216 두 값으로 다르게 적혀 있습니다. 두 값의 관계(생성 대비 보관인지, 다른 기준인지)에 대한 설명이 없습니다.
- 포트별 합계 3,586(2,945 + 641)이 세션 3,595보다 9 적습니다. 포트가 기록되지 않은 세션이 있다는 뜻으로 보이나 사유는 없습니다.
- 9바이트 검체
4af5a5c9…는 출처가 한 곳인데 횟수 칸이 7 입니다. 다른 항목은 두 값이 일치합니다. 한 출발지가 7번 남긴 것인지 집계 오류인지 판정할 수 없어, 본문에서 출처 수만 쓰고 횟수는 해석하지 않았습니다. - ATK-20A6CD와 ATK-8120D7은 의도에 ’파일 다운로드’와 ’다운로드 후 실행’이 모두 있는데 다운로드 수가 0 입니다. 다운로드를 시도했으나 저장되지 않은 것인지, 의도 분류와 저장 집계의 기준이 다른 것인지 구분되지 않습니다.
- 399바이트 OpenSSH 개인키(
43728fbf…)가 심어 놓고 간 것인지, 서버에 있던 것을 가져가려 한 것인지 구분할 수 없습니다. 다운로드 목록에 있는데 주소 칸은 비어 있습니다. 8월 19일 브리프가 남긴 이 미해결 항목이 일곱 번째 관측인 이날도 그대로입니다. - 389바이트 공개키의 해시가 같다는 것은 ’같은 파일’이라는 뜻이지 ’같은 운영자’라는 뜻이 아닙니다. 이날 이 파일을 남긴 별칭 10곳이 하나의 주체인지, 같은 도구를 쓰는 서로 다른 주체인지 판정할 수 없습니다. 대응하는 개인키를 누가 몇 명이 쥐고 있는지도 데이터에 없습니다.
- 1위 지문
acaa53e0…(SSH-2.0-OpenSSH_7.4)의 233곳을 하나의 집합으로 읽어서는 안 됩니다. 널리 쓰이는 배포판의 기본 클라이언트 문자열이라 서로 무관한 다수가 같은 값을 갖는 것이 정상입니다. 또한 지문 군집 총수는 40개인데 목록에는 9종만 실려 있어, 나머지 31개 군집의 규모를 알 수 없습니다. - 허니팟 02의 ADB 세션은 22건인데 관련 객체가 없고, 다운로드는 빈 목록, 확보 검체는 0건입니다. ADB 접촉 22건에서 무엇이 투입됐는지(또는 투입 자체가 없었는지)를 판정할 수 없습니다. ’투입이 없었다’로 쓰지 않습니다.
- VNC 협상 버전
003.003이 99.54%라는 것은 ’상대가 제안한 값’의 분포입니다. 우리 허니팟이 무엇을 먼저 제시했는지에 따라 이 분포가 정해질 수 있으므로, 상대 도구의 성격을 이 값으로 단정하지 않습니다.003.008이 34→240으로 늘어난 것도 도구가 바뀐 것인지 우리 쪽 응답이 바뀐 것인지 구분할 수 없습니다. - 허니팟 02에서 값이 어긋나는 지점이 두 곳이고 그 차이가 둘 다 정확히 123 입니다(VNC 52,441 대 버전 제안 합계 52,318, RDP 2,030 대 쿠키 합계 1,907). 같은 수라는 점을 해석하지 않고 사실로만 기록합니다. 사유는 원자료에 없습니다.
- 이날 02는 수집 실패가 아닙니다. 다만 두 센서의 고유 IP 교집합을 알 수 없어 합산 고유 출발지는 상한 729곳으로만 말할 수 있습니다. 서비스별 고유 IP 합(78+161+43+14+7=303)이 전체 315보다 작아, 한 출발지가 여러 서비스를 함께 훑었는지도 역산할 수 없습니다. 8월 26일 이후 7일 연속 같은 제약입니다.
- 별도로 확보된 Discord 웹훅 주소가 이날 세션·검체 중 무엇과 연결되는지 알 수 없습니다. 이날 어떤 다운로드의 주소 칸에도 나타나지 않아 별도 경로로 확보된 지표로 보이며, 이날 사건과 연결해 서술하지 않았습니다. 웹훅 토큰 문자열은 그 자체가 악용 가능한 값이라 본문에 옮기지 않습니다. 8월 20일 이후 여러 브리프가 같은 이유로 제외해 왔습니다.
- 압축을 풀어야만 드러나는 유포 지표 12건(
31[.]77[.]227[.]121/bins/*계열)에는 날짜 표기가 없고, 이날 이 경로에서의 다운로드는 0건입니다. 이날 관측된 유일한 다운로드 호스트는 다른 곳(185[.]93[.]89[.]72)입니다. 같은 캠페인인지 확인할 수단이 없어 배경 재료로만 두었습니다. - 배경 통계로 들고 있는 CVE 6,607건·CISA KEV 390건·랜섬웨어 확인 98건은 KISA 보안공지 기반 배경 맥락입니다. 이날 허니팟 관측과 연결된 것이 아니고, 이날 SSH·텔넷 공격에서 CVE 참조는 관측되지 않았습니다.
- C-TAS 신고는 전송 계층에서 성공했다는 것까지만 확인됩니다. KISA 쪽에 실제로 적재됐는지는 별도 확인이 필요하고, 이날 신고 건수·처리 상태는 데이터에 없습니다.
- 별칭(
ATK-XXXXXX)은 글 사이에서 같은 마스킹 출발지를 가리키는 표식일 뿐 신원이 아닙니다. - 마지막으로, 허니팟은 문을 열어 주도록 만들어진 서버입니다. 로그인 성공은 ’이 자격증명이 실제 운영 서버에서도 통한다’는 뜻이 아니라 ‘이 자격증명이 시도되고 있다’ 는 뜻입니다.
그리고 아래는 애초에 확인할 수단이 없는 것들입니다. 추정하지 않습니다.
- ASN·ISP — 관련 데이터베이스가 없습니다. 어느 통신사·어느 호스팅 대역인지 확인할 수 없습니다.
- 지리정보 — 동일하게 없습니다. 그리고 IP 지리정보는 애초에 귀속 근거가 되지 않습니다. 어떤 국가·기업·개인도 이날의 공격자로 지목하지 않습니다. 마스킹된 자리에서 어떤 것도 추론하지 않습니다.
- VPN·Tor·클라우드 여부 — 판별 수단이 없습니다.
- VirusTotal — 연동돼 있지 않습니다. 이날 확보한 검체 7종에 악성코드 계열 이름을 붙일 수 없습니다. 검체 분류는 MalwareBazaar 태그를 씁니다.
- User-Agent — 두 관측면 다 HTTP가 아닙니다. 01은 SSH·텔넷, 02는 SMB·RDP·VNC·MSSQL·LDAP·ADB입니다. 위에서 인용한 RDP 쿠키·SMB 방언·VNC 버전은 User-Agent의 대체물이 아니라 프로토콜이 정해 둔 협상 어휘입니다.
- CVE 연결 — SSH·텔넷 공격은 대부분 특정 취약점을 참조하지 않고 자격증명을 씁니다. 02도 프로토콜 협상 단계라 마찬가지입니다.
추정 정리하면 이날은 이렇습니다. 세션 3,595건, 로그인 시도 3,486회, 명령 14,085개. 어제와 견주면 명령이 18.53배입니다. 그런데 그 안에서 뜻이 붙은 것은 422개, 33개에 하나였습니다. 그리고 실제로 뭔가가 남은 행위는 열쇠 13번, 흔적 지우기 10번이었습니다.
우편함으로 돌아가겠습니다. 쏟아진 종이가 열여덟 배가 된 날, 우리가 해야 할 일은 종이 무게를 재는 게 아닙니다. 그 안에 여벌 열쇠가 끼어 있는지 확인하는 것입니다. 이날은 열세 번 끼어 있었습니다. 그 열쇠 파일은 8월 16일부터 열이레째 같은 해시로 나오고 있고, 넣고 가는 출발지만 매일 바뀝니다.
그래서 이날 데이터가 가리키는 건 어제 몰려온 주소들을 목록에 적어 두라는 쪽이 아닙니다. 그 목록은 하루 만에 낡습니다. 서버가 한 대라도 있으시면 오늘 두 가지만 해 보시면 됩니다. 원격 접속 창구가 인터넷에 그대로 열려 있는지 확인하는 것, 그리고 ~/.ssh/authorized_keys 를 한 번 열어 보는 것. 뒤의 것은 몇 초 걸립니다.
관측일은 2026년 9월 1일(UTC) 하루입니다. 출발지 IP는 브리프의 마스킹 형태(220.132.x.x, 147.139.x.x, 125.228.x.x, 130.12.x.x, 34.150.x.x)를 그대로 옮겼고 복원하지 않았습니다. 유포 주소는 접속되지 않도록 변형해 적었습니다(hxxp://, [.]). 자격증명은 서로 다른 IP 3곳 이상에서 관측된 조합 20종만 인용했고, 그 기준을 넘지 못한 조합 317종은 개수만 밝히고 값을 싣지 않았습니다 — 한두 곳에서만 나온 조합은 실제 유출 계정일 수 있기 때문입니다. ASN·국적·행위자 귀속은 확인 수단이 없어 추정하지 않습니다.
