택배 수는 그대로, 송장 양식만 하루 만에 뒤집혔다
10월 1일 화면공유(VNC) 접속 시도는 4만 3,402번으로 평소 범위 안이었습니다. 그런데 접속하면서 내민 버전 표기는 21일 동안 한 번도 과반이 안 되던 새 표기가 63.2%를 차지했습니다. 같은 날 다른 서버에는 처음 보는 주소에서 이름부터 'backdoor.sh'인 파일이 내려왔습니다.

아파트 경비실에 하루 종일 앉아 있다고 생각해 봅시다. 택배 기사님들이 쉴 새 없이 상자를 맡기고 갑니다. 경비 아저씨는 상자를 받을 때마다 송장을 봅니다. 송장은 상자에 붙은 종이입니다. 누가 보냈고 누구에게 가는지가 적혀 있습니다.
몇 주째 보다 보면 눈에 익는 게 생깁니다. 하루에 상자가 대략 몇 개 오는지 알게 됩니다. 송장 양식도 거의 늘 같습니다. 칸 배치도 글씨체도 익숙한 옛날 양식입니다.
그런데 어느 날 아침 이상한 일이 생겼습니다. 상자 수는 평소와 비슷합니다. 그런데 송장의 3분의 2가 처음 보는 새 양식입니다. 어제 우리 서버 앞에서 벌어진 일이 정확히 이랬습니다.
먼저, 우리 서버는 일부러 문을 열어 둔 집입니다
사실 우리는 허니팟을 운영합니다. 허니팟은 일부러 허술하게 열어 두고, 누가 와서 무엇을 하는지 지켜보는 미끼 서버입니다. 그래서 아래 이야기는 실제 피해가 아니라 관찰 기록입니다.
사실 서버는 두 대입니다. 첫 번째(센서 01)는 문이 실제로 열립니다. 들어온 쪽이 무슨 명령을 쳤는지까지 적힙니다. 두 번째(센서 02)는 문을 열어 주지 않습니다. 누가 와서 어떤 송장을 내밀었는지만 적습니다. 오늘 이야기의 중심은 이 두 번째 서버의 경비실 장부입니다.
상자 수는 평소대로였다
사실 두 번째 서버에는 화면공유(VNC) 창구가 있습니다. VNC 는 멀리서 다른 컴퓨터 화면을 보고, 마우스와 키보드를 대신 움직이는 기능입니다. 문이 5900번이라 포트 5900 이라고 부릅니다. 어제 이 창구에 들어온 접속 시도는 43,402건입니다. 하루로 나누면 2초에 한 번꼴로 누군가 상자를 내민 셈입니다.
사실 많아 보이지만 이 창구에서는 평범한 숫자입니다. 우리가 평소 범위로 잡아 둔 구간이 하루 20,953~65,487건입니다. 어제는 그 한가운데쯤입니다. 그래서 이 글은 “폭주”라는 말을 쓰지 않습니다. 상자를 들고 온 곳은 207곳입니다. 한 곳이 평균 209.7번씩 온 셈입니다.
그런데 송장 양식이 뒤집혔다
사실
VNC 는 연결 첫머리에 서로 **“나는 몇 판 규칙으로 말하겠다”**는 표기를 주고받습니다. 이 대화 규칙의 이름이 RFB 입니다. 표기는 003.003 이나 003.008 같은 모양입니다. 앞의 것이 옛 표기, 뒤의 것이 새 표기입니다. 경비실로 치면 송장 양식의 판 번호입니다.
어제 들어온 송장을 양식별로 세면 이렇습니다. 가운데 칸의 비중을 보세요.
| 송장 양식 (RFB 버전) | 어제 건수 | 어제 비중 |
|---|---|---|
새 표기 003.008 |
27,336건 | 63.2% |
옛 표기 003.003 |
15,927건 | 36.8% |
| 표기 없음 | 139건 | 0.3% 남짓 |
사실
이게 왜 눈에 띄는지는 지난 장부를 펴 보면 압니다. 8월 26일부터 9월 27일 사이에 우리 장부가 남은 날은 21일입니다. 그 21일 동안 옛 표기 003.003 은 매일 **82.6%~99.96%**를 차지했습니다. 옛 양식이 과반을 내준 날은 하루도 없었습니다.
사실 새 양식이 가장 많았던 날도 견줘 봅니다.
| 지난 21일 중 최대 | 어제 | |
|---|---|---|
| 새 양식 건수 | 5,616건 (9/13) | 27,336건 — 약 4.9배 |
| 새 양식 비중 | 17.0% (9/17) | 63.2% — 약 3.7배 |
| 옛 양식 건수 | 가장 적은 날 17,315건 (9/17) | 15,927건 — 21일 중 어느 날보다 적음 |
사실 정리하면 이렇습니다. 상자 수는 늘 오던 만큼 왔습니다. 그런데 새 양식 송장은 전에 가장 많던 날의 다섯 배 가까이 붙어 왔습니다. 옛 양식은 장부가 남은 날 중 가장 적었습니다. 바뀐 건 양이 아니라 모양입니다.
왜 바뀌었는지는 모른다
추정 가능성은 크게 둘입니다. 첫째, 상자를 보내는 쪽이 송장 뽑는 프로그램을 바꿨을 수 있습니다. 같은 기사님들이 새 양식으로 갈아탔다는 뜻입니다. 둘째, 우리 경비실 쪽이 바뀌었을 수 있습니다. VNC 에서는 우리 서버가 먼저 “이 판으로 말하자”고 표기를 내밉니다. 경비실 창구에 꽂아 둔 접수 양식이 바뀌면 기사님들이 그걸 따라 쓸 수도 있습니다.
사실 우리 장부는 이 둘을 구분해 주지 않습니다. 9월 1일 글에서도 같은 단서를 달았습니다. 새 양식 27,336건을 어느 곳이 만들었는지도 모릅니다. 많이 온 곳의 목록은 있지만, 그 목록이 어느 창구에 온 건지와 이어져 있지 않습니다.
추정 그래도 하나는 말할 수 있습니다. 경비실이 장부를 21일 동안 꾸준히 적어 두지 않았다면, 어제는 그냥 “상자 4만 3천 개 온 평범한 날”로 지나갔을 겁니다. 양식이 바뀌었다는 사실은 지난 장부와 나란히 놓았을 때만 보입니다.
옆 창구들도 들여다보면
사실 두 번째 서버에는 VNC 말고도 창구가 여럿 있습니다. 어제 들어온 건수와 출발지 수는 이렇습니다.
| 창구 | 무엇을 하는 문인가 | 포트 | 접속 시도 | 출발지 |
|---|---|---|---|---|
| VNC | 화면공유 | 5900 | 43,402건 | 207곳 |
| RDP | 윈도우 원격 데스크톱 | 3389 | 3,565건 | 104곳 |
| ADB | 안드로이드 기기 연결 통로 | 기록 없음 | 215세션 | 기록 없음 |
| SMB | 윈도우 파일 공유 | 445 | 194건 | 53곳 |
| LDAP | 회사 계정 목록 조회 | 389 | 111건 | 8곳 |
| MSSQL | 마이크로소프트 데이터베이스 | 1433 | 50건 | 36곳 |
사실 원격 데스크톱(RDP) 창구에도 볼 것이 있습니다. RDP 접속은 첫머리에 짧은 이름표(쿠키)를 적어 냅니다. 송장의 받는 사람 칸 같은 겁니다. 어제 적힌 이름표는 이렇습니다.
| 이름표 | 횟수 |
|---|---|
Administr |
1,478 |
Admin |
1,476 |
<ip> |
415 |
hello |
43 |
| (빈칸) | 3 |
Domain |
1 |
사실
위 두 줄을 더하면 RDP 접속의 **82.9%**입니다. 열 번 중 여덟 번은 “관리자 앞”이라고 적어 낸 셈입니다. 이 두 이름표는 9월 22일에 각각 5,159번·5,151번으로 튀었습니다. 9월 27일에는 Administr 가 2번으로 내려왔습니다. 그리고 어제 다시 올라왔습니다.
사실 파일 공유(SMB) 창구에서는 반대로 옛 양식이 그대로였습니다. 버전 표기가 남은 442건 중 **439건(99.3%)**이 SMB1 세대 표기였습니다. SMB1 은 아주 오래된 세대의 파일 공유 규칙입니다. ‘SMB 2.???’ 표기는 3건뿐이었습니다. VNC 창구에서만 양식이 바뀐 겁니다.
사실
안드로이드 통로(ADB)는 세션 215건과 검체 8건만 기록됐습니다. 포트·출발지 수·들어온 내용은 어제 장부에 없습니다. 두 번째 서버가 받은 파일 8건 중 6건은 ATK-002498 이 놓고 갔습니다. ATK- 로 시작하는 이름은 우리가 출발지마다 붙이는 별칭입니다. 이 별칭은 8월 28일·30일 장부에도 있습니다.
첫 번째 서버 — 품명 칸에 ’뒷문’이라고 적힌 상자
이제 문이 실제로 열리는 첫 번째 서버로 갑니다. 여기는 경비실을 지나 집 안까지 들어온 쪽의 기록입니다.
사실
어제 ATK-FFF96F 라는 방문자가 파일 하나를 받아 갔습니다. 받아 온 주소는 hxxp://45[.]207[.]157[.]28/backdoor.sh 입니다. 주소는 실수로 접속되지 않게 일부러 변형해 적었습니다. 파일 이름 backdoor 는 우리말로 **‘뒷문’**입니다. 상자 품명 칸에 대놓고 “뒷문”이라고 적혀 온 셈입니다.
사실 이 파일은 셸 스크립트입니다. 셸 스크립트는 명령 여러 줄을 한 파일에 모아 둔 것입니다. 실행하면 적힌 명령이 차례로 돌아갑니다. 크기는 697바이트입니다. 영어 글자로 700자 남짓, 짧은 메모 한 장 분량입니다.
사실 이 상자에는 처음 보는 게 세 가지입니다. 파일의 해시, 보낸 주소, 받아 간 쪽의 별칭입니다. 해시는 파일 내용 전체로 계산한 고유 번호입니다. 한 글자만 달라도 전혀 다른 값이 나옵니다. 세 가지 모두 8월 16일부터 9월 27일까지 장부 31일치 어디에도 없습니다.
추정
이름만 보면 들어온 뒤 다시 들어올 길을 만들어 두려는 파일로 읽힙니다. 하지만 이건 이름에서 나온 해석입니다. 상자 안에 무엇이 들었는지, 실제로 열어 돌렸는지는 우리 기록에 없습니다. ATK-FFF96F 가 어떻게 들어와서 명령을 몇 개 쳤는지도 비어 있습니다.
사실
낯익은 상자도 하나 다시 왔습니다. ATK-60335A 가 hxxp://64[.]89[.]160[.]48:80/bins/parm7 에서 60,088바이트(약 60킬로바이트) 실행파일을 3번 받아 갔습니다. ARM 이라는 종류의 CPU 용입니다. 9월 27일 글에 처음 적은 것과 해시·주소·별칭이 모두 같습니다. 나흘 만의 재등장입니다.
서른네 곳, 송장 프린터는 한 기종
사실 첫 번째 서버로 들어오는 SSH 접속에는 지문이 남습니다. SSH 는 멀리 있는 컴퓨터에 암호화된 통로로 접속하는 방식입니다. 지문은 접속 프로그램이 첫머리에 보여 주는 설정 조합으로 만든 값입니다. 택배로 치면 송장을 뽑은 프린터 기종입니다.
사실
어제 가장 많이 보인 지문은 a591c4dd… 이고, 접속 프로그램 이름은 SSH-2.0-libssh_0.12.0 입니다. libssh 는 SSH 접속 프로그램을 만들 때 가져다 쓰는 부품 묶음입니다. 이 지문이 어제 서로 다른 IP 34곳에서 나왔습니다. 지금까지 이 지문을 보인 곳은 모두 39곳입니다. 그중 87%가 어제 하루에 몰렸습니다. 지문값도, libssh_0.12.0 이라는 이름도 우리 글 장부에는 없던 것입니다. 이 34곳은 어제 파일을 놓고 가지는 않았습니다.
추정 보낸 곳은 34군데로 흩어져 있었습니다. 그런데 송장은 모두 같은 기종 프린터에서 나왔습니다. 그래서 같은 도구로 묶을 수 있습니다. 다만 여기서 선을 긋습니다. 같은 프린터를 쓴다고 같은 회사는 아닙니다. 이건 프로그램의 지문이지 사람의 지문이 아닙니다. 같은 libssh 0.12.0 기본값을 쓰는 관계없는 사람도 같은 값을 냅니다. 그래서 ’같은 도구’까지만 말하고 ’같은 조직’이라고는 말하지 않습니다. 어제 지문 묶음은 모두 48개였습니다.
늘 오던 기사님들
사실 어제 첫 번째 서버에서 로그인에 성공한 주요 세션은 다섯 건입니다. 다섯 건 모두 장부에 이미 있던 모양입니다.
사실
ATK-CA5936 은 8월 19일부터 우리 글에 계속 나온 방문자입니다. 어제도 SSH 로 들어와 3.841초 만에 나갔습니다. 숨 한 번 크게 쉬는 사이입니다. 명령은 1개였지만 행동 분류는 5가지가 붙었습니다. 파일도 2개 받았습니다. 399바이트 OpenSSH 개인키와 54바이트 글자 파일입니다. 지문·해시까지 8월 19일과 같습니다.
사실 나머지 넷은 텔넷이었습니다. 텔넷은 오가는 내용을 암호화하지 않는 오래된 원격 접속 방식입니다. 이 넷은 두 쌍으로 나뉩니다.
ATK-87A71B와ATK-7F6088— 명령 22개, 파일 11개, 행동 분류 ‘방어 무력화’ 하나. 둘 다 1바이트짜리 빈 파일을 남겼습니다. 이 빈 파일은 어제 모두 22번 나왔습니다.ATK-24B51F와ATK-346617— 명령 17개, 파일 0개, 행동 분류 5가지.ATK-CA5936과 같은 조합입니다.
추정 출발지는 서로 다른데 하는 일이 판박이입니다. 첫 쌍은 7시간 44분 간격으로 들어왔습니다. 같은 자동화 스크립트가 여러 곳에서 돈 것으로 읽힙니다. 다만 텔넷에는 지문이 남지 않습니다. 그래서 같은 프린터인지는 확인할 수 없습니다.
시간 순서로 늘어놓으면
어제 하루를 시간 순서로 늘어놓으면 이렇습니다. **텔넷 네 줄의 ’명령 22개’와 ‘명령 17개’**가 쌍으로 짝지어지는 걸 눈여겨보세요. 시각은 한국 시간이고, 괄호 안은 세계 표준시입니다.
- 사실 센서 01 · ATK-CA5936(130.12.x.x) SSH 로그인 성공. 3.841초 · 명령 1개 · 의도 5종(정찰—시스템 · 파일 다운로드 · 실행 권한 부여 · 다운로드 후 실행 · SSH 키 심기). 다운로드 2건: 399바이트 OpenSSH 개인키(43728fbf…) · 54바이트 ASCII 텍스트(00b6f15c…). 지문 16443846184eafde36765c9bab2f4397 · SSH-2.0-Go · 기록 촘촘함 19
- 사실 ATK-CA5936 · 지문 16443846… · 개인키 43728fbf… · 텍스트 00b6f15c… 는 8/19 브리프부터 반복 기록된 값이다. 오늘의 신규 지표가 아니다
- 사실 센서 01 · ATK-87A71B(183.106.x.x) 텔넷 로그인 성공. 66.818초 · 명령 22개 · 의도 '방어 무력화' 1종 · 다운로드 11건 · 기록 촘촘함 42(오늘 최고). 1바이트 빈 파일(01ba4719…, 오늘 22회)의 배달자
- 사실 센서 01 · ATK-24B51F(217.60.x.x) 텔넷 로그인 성공. 63.848초 · 명령 17개 · 의도 5종(CA5936 과 같은 조합) · 다운로드 0
- 사실 센서 01 · ATK-346617(209.99.x.x) 텔넷 로그인 성공. 63.722초 · 명령 17개 · 의도 5종(같은 조합) · 다운로드 0
- 사실 센서 01 · ATK-7F6088(82.14.x.x) 텔넷 로그인 성공. 61.081초 · 명령 22개 · 의도 '방어 무력화' · 다운로드 11건 · 기록 촘촘함 42. 1바이트 빈 파일(01ba4719…)의 배달자 두 별칭 중 하나
- 추정 ATK-87A71B 와 ATK-7F6088 은 출발지가 다른데 명령 22개 · 다운로드 11건 · 의도 · 빈 파일까지 같고 7시간 44분 간격으로 들어왔다. ATK-24B51F 와 ATK-346617 도 명령 17개 · 의도 5종 · 다운로드 0건으로 같다. 같은 자동화 스크립트가 서로 다른 출발지에서 돈 형태로 읽힌다. 텔넷이라 지문이 없어 도구 동일성은 확인할 수 없다
- 사실 센서 01 · ATK-FFF96F 가 hxxp://45[.]207[.]157[.]28/backdoor.sh 에서 697바이트 POSIX 셸 스크립트(83b36b3a…)를 1회 받았다. 이 별칭은 주요 세션 목록에 없다. 해시 · 유포지 · 별칭 모두 아카이브 31일치(8/16~9/27)에 없다
- 사실 센서 01 · ATK-60335A 가 hxxp://64[.]89[.]160[.]48:80/bins/parm7 에서 60,088바이트 ARM ELF(40b497bc…, 'no section header')를 3회 받았다. 9/27 브리프에 처음 기록된 것과 해시 · 주소 · 별칭이 같다. 나흘 만의 재등장
- 사실 센서 01 · 389바이트 OpenSSH RSA 공개키(a8460f44…) 13회 관측, 출처 12곳(목록에는 10개 별칭만 실림). 의도 '지속성 — SSH 키 심기' 16회
- 사실 센서 01 · SSH 지문 a591c4ddccc960a2da8099958270fc92(SSH-2.0-libssh_0.12.0)가 오늘 IP 34곳에서 나왔다. 누적 39곳 · 검체 배달 없음. 이 지문값과 'libssh_0.12.0' 문자열은 브리프 아카이브에 없다
- 사실 센서 02 · VNC(5900) 접촉 43,402건 · 고유 출발지 207곳(곳당 209.7회). 제안 RFB 버전 003.008 27,336회(63.2%) · 003.003 15,927회(36.8%) · 버전 기록 없음 139건
- 사실 8/26~9/27 의 02 브리프 21일치에서 003.008 은 하루 최대 5,616회(9/13), 비중 최대 17.0%(9/17)였다. 003.003 이 과반을 내준 날은 없었다. 오늘 003.003 의 15,927회도 같은 기간 최저(9/17 17,315)보다 적다
- 사실 센서 02 · RDP(3389) 3,565건/104곳. 쿠키 Administr 1,478 · Admin 1,476 · <ip> 415 · hello 43 · (empty) 3 · Domain 1. Administr+Admin 이 82.9%. 9/22 에 각 5,159 · 5,151 로 튀었다가 9/27 에 Administr 2회로 내려왔고 오늘 다시 올라왔다
사실
시각이 찍힌 다섯 줄은 모두 이미 아는 얼굴입니다. 새로운 것은 시각이 비어 있는 ‘하루 집계’ 줄에 몰려 있습니다. backdoor.sh, libssh 지문, 그리고 VNC 양식 전환입니다. 어제 새로운 건 한 건의 세션이 아니라 하루 전체의 모양에서 나왔습니다.
어제 나온 값 — 받아 적을 것
방어에 쓰실 수 있게 값을 그대로 옮깁니다. 값을 누르면 복사됩니다. 주소는 http 대신 hxxp, 점 대신 [.] 로 바꿔 둔 상태입니다. 그대로 두고 쓰세요. 첫 줄과 그 주소 줄이 어제 처음 본 값입니다.
83b36b3a80677d6ef4a165cbbc808b4889c76d194f976eab37a8dfe5c8eabae1backdoor.sh · 697바이트 POSIX 셸 스크립트 · 출처 ATK-FFF96F · 해시 · 유포지 · 별칭 모두 아카이브 31일치에 없음hxxp://45[.]207[.]157[.]28/backdoor.sh위 backdoor.sh 의 유포지 · 처음 본 주소 · C-TAS 신고 대상40b497bc232886341613fdcfd84adaf326aba1336bf42b2ad2cab26f8fc00d9dparm7 · 60,088바이트 ARM ELF(no section header) · 출처 ATK-60335A · 3회 · 9/27 과 같은 해시hxxp://64[.]89[.]160[.]48:80/bins/parm7위 parm7 의 유포지 · 9/27 이후 나흘 만의 재등장43728fbfb98bb39ff61a2db0fc2905bd6937997062b05b9ab8b186fdee18c09a399바이트 OpenSSH 개인키 · URL 미기록 · 출처 ATK-CA5936 · 8/19 이후 반복00b6f15c2274420217ed3098a9f5f00545bf1793d7a324fd18a7809cbbf5b12b54바이트 ASCII 텍스트 · URL 미기록 · 출처 ATK-CA5936 · 8/19 이후 반복a8460f446be540410004b1a8db4083773fa46f7fe76fa84219c93daa1669f8f2389바이트 OpenSSH RSA 공개키 · URL 미기록 · 13회 · 출처 12곳(ATK-AF1536 · 1909BC · 77B6BB · DBE6A8 · 02D330 · 9A0098 · 0F724C · 8027C9 · 6E1C42 · 641804 외)01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b1바이트 빈 파일 · URL 미기록 · 22회 · 출처 ATK-87A71B · ATK-7F6088사실
여덟 줄 중 여섯 줄은 이미 장부에 있던 값입니다. 차단 목록을 꾸준히 관리했다면 어제 새로 추가할 줄은 backdoor.sh 의 해시와 주소, 두 줄입니다.
이 비밀번호 쓰고 계십니까
사실 어제 첫 번째 서버의 로그인 시도는 3,602회였습니다. 24초에 한 번꼴로 누군가 현관 비밀번호를 눌러 본 셈입니다. 라면 하나 끓이는 동안 열 번쯤입니다.
사실 시도된 아이디·비밀번호 조합 중 이 글에 옮기는 건 20종뿐입니다. 서로 다른 IP 세 곳 이상에서 반복된 조합만 원문을 적는 게 우리 규칙입니다. 이 기준에 못 미친 1,608종은 개수만 세고 값은 적지 않습니다. 한 곳에서만 나온 조합은 어디선가 새어 나간 누군가의 진짜 계정일 수 있어서입니다. 1,608종은 장부 31일치에서 세 번째로 큰 값입니다. 9월 7일(2,527종)과 9월 10일(1,828종) 다음입니다. 첫 줄의 출발지 수를 보세요.
| 아이디 | 비밀번호 | 서로 다른 출발지 |
|---|---|---|
| admin | admin | 30곳 |
| 345gs5662d34 | 345gs5662d34 | 11곳 |
| root | password | 6곳 |
| root | 12345 | 5곳 |
| root | 123456 | 5곳 |
| root | admin | 5곳 |
| test | test | 5곳 |
| admin | 123456 | 5곳 |
| root | root | 5곳 |
| user | user | 4곳 |
| telecomadmin | admintelecom | 4곳 |
| root | 111111 | 4곳 |
| root | 123321 | 4곳 |
| root | 1234 | 4곳 |
| root | 12345678 | 4곳 |
| root | 123456789 | 4곳 |
| root | 1234567890 | 4곳 |
| root | 1q2w3e4r | 4곳 |
| root | 1qaz2wsx | 4곳 |
| root | 1qaz@WSX | 4곳 |
사실
admin/admin 은 30곳에서 143번 들어왔습니다. 한 곳이 평균 4.8번씩 넣어 본 셈입니다. 표 아래쪽의 1q2w3e4r, 1qaz2wsx 는 키보드 자판을 위아래로 훑으면 나오는 순서입니다. 외우기 쉬운 비밀번호는 넣어 보기도 쉽습니다.
어제 하루 전체
사실 문이 실제로 열리는 첫 번째 서버의 하루 집계입니다. 오른쪽 칸을 함께 보세요.
| 항목 | 10월 1일 | 견줄 것 |
|---|---|---|
| 세션 | 4,194건 | 20.6초에 한 번 |
| 고유 출발지 | 213곳 | 한 곳당 평균 19.7세션 |
| 로그인 시도 | 3,602회 | 24초에 한 번 |
| 명령 | 5,577개 | 15.5초에 하나 |
| 포트 2222 (SSH) | 3,539세션 | 전체의 약 84% |
| 포트 2223 (텔넷) | 654세션 | 약 16% — 그런데 로그인 성공 주요 세션 다섯 중 넷이 텔넷 |
사실 서버 안에서 친 명령을 하려던 일별로 나누면 이렇습니다.
| 무엇을 하려 했나 | 횟수 |
|---|---|
| 정찰 — 시스템 살펴보기 | 3,129회 |
| 실행 권한 부여 | 787회 |
| 파일 다운로드 | 18회 |
| 지속성 — SSH 키 심기 | 16회 |
| 다운로드 후 실행 | 13회 |
| 흔적 삭제 | 13회 |
| 방어 무력화 | 2회 |
사실 ’SSH 키 심기’는 서버에 비밀번호 없이 다시 들어올 수 있는 열쇠를 몰래 등록해 두는 일입니다. 그 열쇠 파일이 위 IOC 의 389바이트 공개키입니다. 문자 메시지 세 통 정도 크기입니다. 이 열쇠는 어제 12곳에서 13번 들어왔습니다. ’실행 권한 부여’는 받은 파일을 프로그램으로 돌릴 수 있게 허락하는 단계입니다. 일곱 줄을 더하면 3,978입니다. 명령 5,577개보다 적습니다. 그 차이를 장부가 설명하지는 않습니다.
사실
두 번째 서버에서 가장 많이 온 12곳의 건수를 더하면 43,019입니다. 그중 상위 9곳은 각각 2,900번 넘게 왔습니다. 168.144.x.x 는 서로 다른 두 별칭(ATK-48B384 · ATK-2A62E4)으로 나옵니다. 주소가 가려져 있어 같은 주소인지는 알 수 없습니다.
같은 날 VNC 창구 이야기는 60초 영상으로도 만들었습니다. 영상은 숫자 하나에 집중했고, 이 글은 그 숫자의 앞뒤 장부를 펼쳤습니다.
공격자가 쓴 수법을 국제 분류표에 대응시키면
MITRE ATT&CK 은 공격 수법마다 번호를 붙여 둔 국제 목록입니다. 어제 본 행동을 그 번호에 맞추면 이렇습니다. ID 를 누르면 원문 설명으로 갑니다. 우리 말을 그대로 믿지 말고 직접 확인해 보시라고 링크를 겁니다.
- T1110.001Brute Force: Password Guessing — 로그인 시도 3,602회, admin/admin 30곳 143회추정
- T1078.001Valid Accounts: Default Accounts — 주요 세션 5건 모두 로그인 성공, 인용 조합이 기본값 계열추정
- T1082System Information Discovery — '정찰 — 시스템' 3,129회추정
- T1105Ingress Tool Transfer — '파일 다운로드' 18회, backdoor.sh · parm7추정
- T1222.002File and Directory Permissions Modification: Linux and Mac — '실행 권한 부여' 787회추정
- T1098.004Account Manipulation: SSH Authorized Keys — 'SSH 키 심기' 16회, 공개키 출처 12곳추정
- T1070Indicator Removal — '흔적 삭제' 13회추정
- T1562Impair Defenses — '방어 무력화' 2회, ATK-87A71B · ATK-7F6088추정
- T1046Network Service Discovery (센서 02 — 접촉 패턴 기준) — VNC · RDP · SMB 등 창구 두드림추정
사실 아홉 줄 모두 **[추정]**입니다. 우리 손에 있는 건 명령의 ’의도 분류 결과’와 횟수까지입니다. 명령 원문은 없습니다. 분류표에 맞추는 건 늘 해석입니다. 마지막 줄은 두 번째 서버 이야기입니다. 거기서는 문이 열리지 않으므로 ’두드린 모양’만 보고 붙인 번호입니다.
전에 이런 모양이 있었다
추정 Mirai 봇넷 (2016). 기본 계정으로 텔넷 등에 로그인해 IoT 장비를 감염시켰습니다. IoT 장비는 공유기·CCTV 처럼 인터넷에 연결된 작은 기기입니다. 감염된 장비들은 대규모 DDoS 공격에 동원됐습니다. DDoS 는 여러 기계가 한꺼번에 접속을 퍼부어 서비스를 마비시키는 공격입니다.
admin/admin,root/12345같은 기본·취약 자격증명으로 원격 셸에 들어간다는 점이 어제와 닮았습니다. 서버용이 아닌 장비용 CPU(ARM) 실행파일을 내려받는 점도 닮았습니다. (출처 유형: 정부 보안 경보 — US-CERT(CISA) Alert TA16-288A)
사실 여기서 멈춥니다. 검체 분류 태그가 오늘 재료에 없습니다. 그래서 어제 파일이 Mirai 계열이라는 판정은 하지 않습니다. 닮은 건 수법까지입니다.
그래서 뭘 해야 하나
택배 양식이 어떻게 바뀌든, 경비실이 할 수 있는 일은 정해져 있습니다. 창구를 아무에게나 열어 두지 않는 것, 같은 사람이 계속 오면 멈춰 세우는 것, 들어온 상자를 기록하는 것입니다.
사실 1. 기본 계정·쉬운 비밀번호를 그대로 쓰고 있다 · 가능성 높음 어제 주요 세션 다섯 건은 모두 로그인 단계를 넘었습니다. 위 표 맨 위 조합들은 제품 기본값이거나 흔한 비밀번호입니다. ’SSH 키 심기’는 16번 있었고, 열쇠 파일은 12곳에서 왔습니다.
추정
뚫리면 원격으로 명령을 칠 수 있는 창(셸)을 내주게 됩니다. 침입자가 열쇠를 심고 나가면 나중에 비밀번호를 바꿔도 그 열쇠로 다시 들어옵니다. 비밀번호를 바꿨다면 authorized_keys(허용된 열쇠 목록) 파일도 함께 확인하세요.
사실 2. 비밀번호 로그인을 허용하고 열쇠 방식을 쓰지 않는다 · 가능성 높음 로그인 시도 3,602회 중 SSH 세션은 3,539건이었습니다. SSH 로그인 성공 세션도 있었습니다. 공개하지 않은 1,608종에는 새어 나간 진짜 계정이 섞였을 수 있습니다. 다만 확인한 건 아닙니다.
추정 새어 나간 진짜 비밀번호가 맞으면, 여러 번 틀린 흔적도 없이 정상 로그인처럼 보이는 침입이 됩니다.
사실 3. 관리 창구를 인터넷에 직접 열어 두고 있다 · 가능성 높음 첫 번째 서버에는 세션 4,194건이 213곳에서 왔고, 실제 로그인 성공까지 갔습니다. 두 번째 서버에는 VNC 43,402건(207곳), RDP 3,565건(104곳), SMB 194건(53곳), LDAP 111건(8곳), MSSQL 50건(36곳)이 왔습니다. 두 번째 서버는 문을 열어 주지 않으니 로그인 성공이라는 개념 자체가 없습니다.
추정 화면공유나 원격 데스크톱이 인터넷에 그대로 열려 있으면 하루 수천~수만 번 두드림을 받습니다. 그중 한 번이라도 통하면 화면과 키보드가 통째로 넘어갑니다. 다만 두 번째 서버 데이터만으로 그 가능성이 얼마나 큰지는 말할 수 없습니다. 어제처럼 양식이 하루 만에 바뀌어도, 창구를 닫아 둔 집은 영향을 받지 않습니다.
추정
4. 접속 빈도 제한(fail2ban 등)이 없다 · 가능성 중간
fail2ban 은 “몇 번 틀리면 한동안 문을 잠그는” 도구입니다. VNC 는 한 곳이 평균 209.7번, RDP 는 34.3번씩 왔습니다. 첫 번째 서버도 한 곳당 19.7세션입니다. 이런 쪽은 빈도 제한으로 크게 줄일 수 있습니다. 반면 admin/admin 은 30곳에 흩어져 한 곳당 5번이 안 됩니다. “5번 틀리면 잠금” 규칙에는 안 걸릴 수 있습니다. 두 종류가 섞여 있어서 ’중간’으로 둡니다.
사실
5. 밖으로 나가는 연결을 막지 않고 있다 · 가능성 높음
어제 ‘파일 다운로드’ 의도가 18회, ’다운로드 후 실행’이 13회였습니다. backdoor.sh 와 parm7 은 모두 서버가 밖에 있는 주소로 나가서 받아 온 파일입니다. ATK-CA5936 도 파일 2개를 받았습니다.
추정
나가는 길이 막혀 있었다면 ‘뒷문’ 상자는 경비실에 닿지도 못했을 겁니다. 열어 두면 서버가 바깥에서 스크립트·실행파일을 받아 돌립니다. 그 결과 봇넷에 끌려가거나 백도어가 더 깔릴 수 있습니다. backdoor.sh 의 실제 내용은 우리 재료에 없습니다.
추정 6. 로그를 모으지 않거나 이상 행동 감시가 없다 · 가능성 중간 ’흔적 삭제’가 13회, ’방어 무력화’가 2회 있었습니다. 정찰(3,129회)에 비하면 적습니다. 서버 안 기록만 믿으면, 침입자가 지운 기록과 함께 침입 사실 자체를 늦게 알게 됩니다. 기록을 바깥으로 실시간 보내 두지 않으면 나중에 뒤져 볼 재료도 남지 않습니다. 어제 VNC 양식 전환도 21일치 장부가 따로 남아 있어서 알아챘습니다.
사실
어제 처음 본 유포지 45[.]207[.]157[.]28 은 신고 정책상 C-TAS(한국인터넷진흥원의 사이버 위협정보 공유 체계) 신고 대상입니다. 다만 이 주소가 실제로 전송됐는지는 재료에 없습니다. 전송했더라도 우리가 확인할 수 있는 건 전송 성공까지입니다. KISA 쪽에 실제로 올라갔는지는 따로 확인해야 합니다.
우리가 모르는 것
이 블로그가 다른 곳과 다른 지점입니다. 아는 것만큼 모르는 것도 적습니다.
바뀐 송장 양식에 대해
- [확인 불가] VNC 버전 표기가
003.003우위에서003.008우위로 뒤집힌 원인을 모릅니다. 상대 도구가 바뀌었는지, 우리 허니팟이 먼저 내미는 버전이나 설정이 바뀌었는지 장부가 구분해 주지 않습니다. 9월 1일 글에도 같은 단서를 달았습니다. - [확인 불가] 새 양식 27,336건을 어느 출발지가 만들었는지 모릅니다. 많이 온 곳 목록이 창구별로 나뉘어 있지 않습니다.
- [확인 불가] 많이 온 곳 목록의 ’건수’와 전체 ’세션’이 같은 단위인지 정의가 없습니다. 그래서 상위 12곳 합 43,019 를 전체 중 몇 퍼센트라고 바꿔 말하지 않습니다.
- [확인 불가] 안드로이드 통로(ADB)는 세션 215건·검체 8건 말고는 상세 기록이 없습니다. 들어온 내용·포트·출발지 수를 다룰 수 없습니다.
‘뒷문’ 상자와 첫 번째 서버에 대해
- [확인 불가]
backdoor.sh(83b36b3a…, 697바이트)의 내용과 실행 여부를 모릅니다. 받아 간ATK-FFF96F의 세션이 주요 세션 목록에 없어서, 어떻게 들어왔는지·명령을 몇 개 쳤는지·무엇을 하려 했는지도 비어 있습니다. - [확인 불가] 유포지
45[.]207[.]157[.]28이 C-TAS 에 실제로 전송·적재됐는지 이 재료로는 확인할 수 없습니다. - [추정] 대표 세션의 포트를 2222 로 적은 근거는 포트 2222 의 수(3,539)와 SSH 의 수(3,539)가 같다는 것뿐입니다. 세션별 포트 칸은 없습니다.
- [확인 불가] libssh 지문
a591c4dd…의 누적 39곳 중 어제 이전 5곳이 언제 왔는지 모릅니다. 우리 글 장부에는 없지만 ’어제 처음 관측’이라고는 쓰지 않습니다. - [확인 불가] 399바이트 OpenSSH 개인키(
43728fbf…)를 공격자가 가져온 건지, 서버에서 만들어진 건지 재료가 구분해 주지 않습니다. 8월 19일 이후 같은 상태입니다. - [확인 불가] 1바이트 빈 파일(
01ba4719…, 22회)의 용도를 모릅니다. 다운로드에 실패한 흔적인지 일부러 그런 건지 가릴 수 없습니다. - [확인 불가] 공개하지 않은 자격증명 1,608종 중 실제 새어 나간 계정이 얼마나 되는지 모릅니다. ’새어 나간 것일 수 있다’는 공개를 미룬 이유일 뿐, 유출을 확인한 것이 아닙니다.
일부러 빼거나 연결하지 않은 것
- [제외] 평문 지표로 남은 Discord 웹훅 1건은 어제 어느 관측과 이어지는지 재료에 없습니다. 장부에 반복해 나온 값이라 본문에 쓰지 않았습니다.
- [제외] 압축을 풀어서만 보이는 주소 12건(
31[.]77[.]227[.]121/bins/…)은 8월 16일 이후 반복된 지표라 배경으로만 둡니다. - [제외] 배경 통계(CVE 7,662건 · KEV 412건 · 랜섬웨어 연계 확인 101건)는 어제 허니팟 관측과 직접 이어지지 않아 근거로 쓰지 않았습니다.
아예 판단하지 않는 것
- 통신사·조직(ASN·ISP) — 관련 데이터베이스가 없습니다. 추정하지 않습니다.
- 지리 위치 — 같은 이유로 모릅니다. IP 지리정보는 애초에 누가 했는지를 가리는 근거가 되지 못합니다. 이 글은 어떤 국가·기업·개인도 공격자로 지목하지 않습니다.
- VPN·Tor·클라우드 여부 — 판별할 수단이 없습니다.
- 검체 분류(VirusTotal) — 연동돼 있지 않습니다. 검체 분류는 MalwareBazaar 태그를 씁니다.
- 접속 프로그램 문자열(User-Agent) — 두 서버 모두 웹(HTTP)이 아닙니다. 첫 번째는 SSH·텔넷, 두 번째는 SMB·RDP·VNC·MSSQL·LDAP·ADB 입니다. 웹 공격은 별도 소스에서 다룹니다.
- 취약점 번호(CVE) 연결 — SSH·텔넷 공격은 대부분 특정 취약점을 참조하지 않습니다. 두 번째 서버도 접속 규칙을 맞추는 단계라 마찬가지입니다.
어제 경비실에는 상자가 늘 오던 만큼 왔습니다. 4만 3천 개, 2초에 하나꼴입니다. 다른 건 송장이었습니다. 21일 동안 한 번도 과반이 된 적 없던 새 양식이 열 장 중 여섯 장을 넘었습니다. 34곳에서 온 송장은 같은 기종 프린터로 뽑혀 있었습니다. 처음 보는 발송지에서 온 상자 하나에는 품명 칸에 ’뒷문’이라고 적혀 있었습니다.
양식이 왜 바뀌었는지, 상자 안에 무엇이 들었는지는 모릅니다. 모르는 건 모른다고 둡니다. 다만 양식이 바뀐 걸 알아챈 건 21일치 장부가 있었기 때문입니다. 그리고 양식이 어떻게 바뀌든 결과가 같은 집이 있습니다. 창구를 닫아 둔 집입니다.
관측일은 2026년 10월 1일(UTC 기준 하루)이고, 이 글은 다음 날 정리했습니다. 출발지 IP 는 브리프에 가림 처리된 형태(130.12.x.x, 183.106.x.x, 217.60.x.x, 209.99.x.x, 82.14.x.x, 168.144.x.x) 그대로 옮겼고 복원하지 않았습니다. 유포지 주소는 실수로 접속되지 않도록 디팽(hxxp://, [.]) 상태를 본문과 IOC 블록 모두에서 유지했습니다. 자격증명은 서로 다른 IP 3곳 이상에서 반복 관측된 조합 20개만 원문 인용했고, 나머지 1,608종은 개수만 밝히고 값은 적지 않았습니다. 통신사·국적·VPN 여부처럼 우리에게 계측 수단이 없는 항목은 추정하지 않고 “모른다”로 남겨 뒀습니다.
