다섯 번 와서 꽂은 플러그, 서버 콘센트 모양이 아니었다
10월 6일 오전, 같은 출발지가 8분 37초 동안 우리 SSH 서버에 다섯 번 로그인했습니다. 들어올 때마다 명령은 두 줄이었고, 밖에서 받아 온 파일은 모두 24건이었습니다. 그 실행파일은 서버용이 아니라 ARM 32비트 장비용이었고, 접속 지문·유포지·해시는 모두 처음 보는 값이었습니다.

해외여행을 가서 호텔 방에 들어갔다고 해 봅시다. 휴대폰 충전기를 벽에 꽂으려는데 들어가지 않습니다. 구멍이 둥근 두 개가 아니라 납작한 세 개입니다. 전기는 똑같이 흐르고 있습니다. 그래도 플러그 모양이 맞지 않으면 쓸 수 없습니다.
컴퓨터 프로그램도 비슷합니다. 컴퓨터의 두뇌를 CPU라고 부릅니다. CPU에는 종류가 여럿 있고, 실행파일은 그중 한 종류에 맞춰 만들어집니다. 모양이 맞는 콘센트에서만 도는 플러그와 같습니다.
어제 누군가 우리 서버에 9분이 안 되는 사이 다섯 번 들어왔습니다. 들어올 때마다 밖에서 플러그를 받아 왔습니다. 그런데 그 플러그는 서버용 모양이 아니었습니다. 오늘 이야기는 그 플러그의 모양에 관한 것입니다.
우리 콘센트는 일부러 열어 둔 미끼입니다
사실 우리는 허니팟을 운영합니다. 허니팟은 일부러 허술하게 열어 둔 미끼 서버입니다. 누가 와서 무엇을 하는지 지켜보는 용도입니다. 아무나 쓰라고 내놓은 콘센트 옆에 CCTV를 달아 둔 셈입니다. 아래 이야기는 실제 피해가 아니라 관찰 기록입니다.
사실 서버는 두 대입니다. 첫 번째(센서 01)는 비밀번호가 맞으면 실제로 들어갈 수 있습니다. 들어온 사람이 무슨 일을 했는지까지 기록됩니다. 두 번째(센서 02)는 절대 열리지 않습니다. 누가 어느 문을 몇 번 두드렸는지만 적습니다. 오늘 주인공은 첫 번째 서버에서 나왔습니다.
9분 동안 다섯 번
사실
먼저 숫자부터 보겠습니다. ATK-3ED4D8이라는 출발지가 SSH로 로그인에 성공했습니다. SSH는 멀리 있는 컴퓨터에 들어가 명령을 치는 통로입니다. 오가는 내용은 암호로 감싸서 보냅니다. ATK-로 시작하는 이름은 우리가 출발지마다 붙이는 별칭입니다. 실제 주소는 45.198.x.x처럼 뒷자리를 가려서 적습니다.
다섯 번의 방문을 나란히 놓으면 이렇습니다. 오른쪽 끝 ‘직전과 간격’ 칸을 보세요.
| 회차 | 시작 (한국 시간) | 머문 시간 | 명령 | 받은 파일 | 직전과 간격 |
|---|---|---|---|---|---|
| 1 | 10:52:08 | 약 43.4초 | 2개 | 6건 | — |
| 2 | 10:53:09 | 약 38.4초 | 2개 | 5건 | 17.8초 |
| 3 | 10:55:52 | 약 57.3초 | 2개 | 5건 | 2분 4초 |
| 4 | 10:57:58 | 약 48.9초 | 2개 | 4건 | 1분 9초 |
| 5 | 11:00:07 | 약 37.6초 | 2개 | 4건 | 1분 20초 |
사실 첫 방문 시작부터 마지막 방문 끝까지 8분 37초입니다. 평균 1분 43초에 한 번꼴로 다시 들어온 셈입니다. 두 번째 방문은 첫 방문이 끝나고 17.8초 만이었습니다. 문을 닫고 나가서 숨 한 번 고르고 다시 연 정도입니다.
사실 다섯 번 모두 명령은 딱 두 줄이었습니다. 다 합쳐 10줄입니다. 그런데 받아 온 파일은 24건이었습니다. 한 줄 칠 때마다 파일이 두 개 넘게 들어온 꼴입니다. 다섯 번 머문 시간을 다 더하면 약 3분 46초입니다. 8분 37초 중 절반이 안 되는 시간 동안만 안에 있었습니다.
사실 다섯 번 모두 같은 세 가지 행동이 분류됐습니다. 파일 다운로드, 실행 권한 부여, 다운로드 후 실행입니다. ’실행 권한 부여’는 받은 파일에 “이건 실행해도 되는 프로그램”이라는 표시를 붙이는 일입니다. 받아 온 플러그를 콘센트에 꽂을 수 있게 하는 단계입니다.
추정 다만 이 세 가지가 어떤 순서로 일어났는지는 모릅니다. 분류 기록에는 순서가 담기지 않습니다. “받고 → 표시하고 → 실행했다”고 쓰고 싶어집니다. 하지만 우리가 말할 수 있는 건 “세 가지가 다 관측됐다”까지입니다.
들고 온 플러그의 모양
사실 이 출발지가 어제 들여온 파일은 세 종류입니다.
| 파일 이름 | 크기 | 무엇인가 | 하루 기록 |
|---|---|---|---|
ssh |
1,872바이트 | Bash 스크립트 | 32회 |
0uparm |
55,804바이트 | ARM 32비트 실행파일 · 정적 링크 | 13회 |
0uparm5 |
48,112바이트 | ARM 32비트 실행파일 · uClibc 동적 링크 | 4회 |
사실 낯선 말이 많으니 하나씩 풀겠습니다.
- Bash 스크립트는 명령 여러 줄을 파일 하나에 적어 둔 쪽지입니다. 1,872바이트면 영어 글자 1,872자입니다. 공책 반 쪽쯤 되는 길이입니다.
- ARM 32비트는 CPU의 한 종류입니다. 이게 바로 플러그의 모양입니다. 브리프는 두 실행파일을 **“서버용이 아닌 장비용”**으로 분류했습니다.
- 정적 링크는 필요한 부품을 파일 안에 전부 넣어 둔 형태입니다. 어댑터가 일체형으로 붙어 있는 플러그입니다.
- 동적 링크는 반대로 꽂히는 기기 안의 부품을 빌려 씁니다.
0uparm5는 uClibc라는 부품을 빌려 쓰도록 만들어졌습니다. - 두 실행파일 모두 stripped 상태입니다. 프로그램 안에 붙어 있던 이름표 같은 안내 정보를 떼어 냈다는 뜻입니다.
추정 uClibc는 작은 임베디드 장비에서 흔히 쓰는 부품 묶음입니다. 임베디드 장비는 공유기·인터넷 카메라처럼 한 가지 일만 하는 작은 컴퓨터를 말합니다. 그러니까 이 플러그는 서버 콘센트보다 집 안 공유기나 카메라 콘센트에 맞춰 만든 것으로 보입니다.
사실
크기도 보겠습니다. 0uparm은 55,804바이트, 약 55킬로바이트입니다. 스마트폰 사진 한 장이 보통 몇 메가바이트이니 그보다 수십 배 작습니다. 작은 기기에 들어가야 하는 프로그램이라 이렇게 작습니다.
사실 그런데 세 파일의 기록을 다 더하면 49회입니다. 위 다섯 번의 방문에서 받은 파일은 24건이었습니다. 25건이 비어 있습니다.
추정 그 차이로 보아 이 출발지는 우리가 눈여겨본 다섯 번 말고도 더 들어왔던 것으로 보입니다. 몇 번 더 왔는지, 언제 왔는지는 기록에 없습니다.
쪽지와 플러그는 서로 다른 가게에서 왔다
사실
파일이 나온 곳은 두 군데입니다. 이렇게 파일을 내려주는 곳을 유포지라고 부릅니다. 쪽지(ssh)는 hxxp://45[.]198[.]224[.]34/ssh에서 왔습니다. 플러그 두 개는 hxxp://151[.]243[.]24[.]225/에서 왔습니다. 주소 중간의 [.]와 앞의 hxxp는 실수로 눌러도 접속되지 않게 일부러 망가뜨린 표기입니다.
추정 쪽지 가게와 플러그 가게가 다릅니다. 그래서 “쪽지가 플러그를 불러왔다”는 2단계 구조로 보입니다. 설명서를 먼저 받고, 설명서에 적힌 가게에서 플러그를 사 오는 식입니다. 하지만 쪽지 내용과 다운로드 순서가 기록에 없습니다. 확인은 못 했습니다.
사실
눈에 띄는 점이 하나 더 있습니다. 들어온 주소 45.198.x.x와 쪽지 가게 주소 45[.]198[.]224[.]34는 앞 두 자리가 같습니다. 우리 기록에서 이런 모양은 9월 7일·9월 8일·9월 15일에 이어 네 번째입니다.
추정 앞자리가 같다고 같은 건물이라는 뜻은 아닙니다. 같은 동네 번지수 앞자리가 같은 것과 비슷합니다. 게다가 들어온 주소는 뒷자리를 가려 놨습니다. 같은 컴퓨터인지, 같은 사람이 운영하는 곳인지는 판단할 수 없고, 판단하지도 않습니다.
상표는 흔한데, 회로는 처음 보는 것
사실
SSH로 접속하는 프로그램은 들어올 때 자기 이름을 밝힙니다. 이 출발지는 SSH-2.0-libssh_0.9.6이라고 밝혔습니다. libssh는 SSH 접속 프로그램을 만들 때 가져다 쓰는 부품 묶음입니다. 이 이름은 흔합니다. 어제만 IP 12곳, 지금까지 누적 684곳이 같은 이름을 쓴 큰 무리(f555226d…)가 있습니다.
사실
그런데 접속 프로그램의 설정 조합으로 만든 값이 따로 있습니다. 이걸 hassh, 우리말로는 접속 지문이라고 부릅니다. 이 출발지의 지문은 3335afa7a75e84f8348f05c623c5ecf9입니다. 그 큰 무리와 다릅니다. 어제 많이 보인 지문 상위 15개에도 없고, 33개 브리프 전체에도 없습니다.
추정 충전기로 치면 겉에 찍힌 상표는 흔한 것인데, 뜯어보니 회로 배치가 처음 보는 것입니다. 다만 지문은 도구를 어떻게 만들었는지를 보여 줄 뿐입니다. 다른 설정의 도구라는 것까지만 말할 수 있습니다. 다른 사람이나 다른 조직이라는 뜻은 아닙니다.
사실
정리하면 별칭 ATK-3ED4D8, 지문 3335afa7…, 유포지 두 곳, 해시 세 개가 모두 8월 16일부터 쌓은 33개 브리프에 한 번도 없던 값입니다.
시간 순서로 늘어놓으면
어제 기록을 시간 순서대로 놓으면 이렇습니다. 시각은 세계 표준시(UTC)이고, 한국 시간은 9시간을 더하면 됩니다. 다섯 줄의 시작 시각과 끝 시각 사이 초 단위를 눈여겨보세요.
- 사실 ATK-3ED4D8(45.198.x.x) SSH 로그인 성공. 약 43.4초 · 명령 2개 · 다운로드 6건 · 기록 촘촘함 28. 클라이언트 SSH-2.0-libssh_0.9.6, hassh 3335afa7a75e84f8348f05c623c5ecf9. 입력 기록(TTY)은 있으나 내용은 브리프에 없다
- 사실 직전 세션이 끝나고 17.8초 뒤 같은 별칭이 다시 로그인 성공. 약 38.4초 · 명령 2개 · 다운로드 5건 · 기록 촘촘함 25
- 사실 세 번째 세션. 약 57.3초 · 명령 2개 · 다운로드 5건 · 기록 촘촘함 25. 직전 세션과 2분 4초 간격
- 사실 네 번째 세션. 약 48.9초 · 명령 2개 · 다운로드 4건 · 기록 촘촘함 22
- 사실 다섯 번째 세션. 약 37.6초 · 명령 2개 · 다운로드 4건 · 기록 촘촘함 22. 첫 세션 시작부터 8분 37초 동안 명령 10개, 다운로드 24건
- 추정 다섯 세션의 행동 분류(파일 다운로드 · 실행 권한 부여 · 다운로드 후 실행)는 순서까지 같다. 다만 이 목록은 실행 순서를 담지 않는다. '다운로드 → 권한 → 실행' 순으로 일어났다고는 쓸 수 없고, 세 단계가 관측됐다는 데까지만 말할 수 있다
- 사실 ATK-3ED4D8 이 보낸 파일 기록은 셋. ssh 스크립트(1,872바이트 Bash) 32회, 0uparm(55,804바이트, ARM 32비트 정적 링크) 13회, 0uparm5(48,112바이트, ARM 32비트 uClibc 동적 링크) 4회. 합계 49회로, 위 다섯 세션의 다운로드 24건보다 많다
- 추정 49와 24의 차이로 보아 이 별칭은 위 다섯 건 밖에서도 세션을 더 연 것으로 보인다. 몇 번 더 열었는지는 기록에 없다
- 추정 스크립트(45[.]198[.]224[.]34)와 실행파일(151[.]243[.]24[.]225)의 유포지가 다르다. '스크립트가 실행파일을 불러왔다'는 2단계 구조로 보이지만, 스크립트 내용과 다운로드 순서가 없어 확인할 수 없다
- 사실 ATK-BDB53E 의 kla.sh(39be6853…, 3,241바이트)는 9/15 첫 관측 이후 22일째 해시가 같다. 같은 유포지의 net.x86_64 는 해시가 세 번째로 바뀌었다. 9/15 · 9/17 cd6ccc5d…(190,632B), 9/20 · 9/22 · 9/27 2cebccdc…(192,328B), 오늘 64d8f97b…(193,288B). 직전보다 960바이트 크다
사실 다섯 번 모두 1분 안에 끝났습니다. 가장 짧은 건 37.6초, 가장 긴 건 57.3초입니다. 명령은 매번 두 줄로 같았습니다. 받은 파일 수만 6 → 5 → 5 → 4 → 4로 조금씩 줄었습니다. 사람이 손으로 치는 모양보다는 같은 동작을 되풀이하는 자동 프로그램에 가까워 보입니다.
어제 하루 전체
이제 시야를 넓혀서 첫 번째 서버의 하루 전체를 봅니다. 오른쪽 ‘견줄 것’ 칸이 이 숫자들을 실감 나게 해 줍니다.
| 항목 | 10월 6일 | 견줄 것 |
|---|---|---|
| 세션(접속 한 번) | 3,969건 | 약 22초에 한 번 |
| 고유 출발지 | 188곳 | 한 곳이 평균 약 21번 |
| 로그인 시도 | 3,713회 | 약 23초에 한 번 비밀번호를 넣어 본 셈 |
| 친 명령 | 5,647개 | 약 15초에 하나 |
| 포트 2222 (SSH) | 3,271세션 | 전체의 약 82% |
| 포트 2223 (텔넷) | 698세션 | 약 18% |
사실 텔넷은 SSH와 같은 일을 하는 오래된 통로입니다. 차이는 내용을 암호로 감싸지 않는다는 점입니다. 포트는 한 컴퓨터 안의 문 번호라고 생각하면 됩니다.
사실 하루 동안 분류된 행동은 이렇습니다.
| 무엇을 하려 했나 | 횟수 |
|---|---|
| 정찰 — 시스템 살펴보기 | 3,001회 |
| 실행 권한 부여 | 173회 |
| 파일 다운로드 | 51회 |
| 다운로드 후 실행 | 49회 |
| 지속성 — SSH 키 심기 | 17회 |
| 흔적 삭제 | 14회 |
| 정찰 — 네트워크 | 1회 |
사실 정찰이 압도적입니다. 들어와서 제일 먼저 하는 일은 안을 둘러보는 것이었습니다. 그런데 오늘 주인공은 다섯 번 들어오는 동안 정찰로 분류된 행동이 없었습니다. 둘러보지 않고 곧장 플러그부터 받아 왔습니다. 남의 열쇠를 몰래 걸어 두는 ’SSH 키 심기’나 ’흔적 삭제’도 이 출발지에서는 나오지 않았습니다. 그건 하루 전체의 다른 접속에서 나온 숫자입니다.
이 비밀번호 쓰고 계신가요
사실 어제 시도된 아이디·비밀번호 조합 중 이 글에 그대로 옮기는 건 10종입니다. 기준은 하나입니다. 서로 다른 IP 세 곳 이상에서 똑같이 넣어 본 조합만 적습니다. 여러 곳이 똑같이 들고 다니는 번호는 누구의 것도 아닌 공장 기본값이기 때문입니다. 세 번째 칸의 숫자를 보세요.
| 아이디 | 비밀번호 | 서로 다른 출발지 |
|---|---|---|
| admin | admin | 20곳 |
| 345gs5662d34 | 345gs5662d34 | 13곳 |
| root | root | 8곳 |
| root | 123456 | 8곳 |
| root | 1234 | 8곳 |
| root | admin | 7곳 |
| root | 12345 | 7곳 |
| guest | guest | 7곳 |
| user | user | 6곳 |
| admin | password | 6곳 |
사실 이 기준에 못 미친 조합은 개수만 셉니다. 어제는 2,213종이었습니다. 누군가의 진짜 계정에서 새어 나온 것일 수 있어서 값은 적지 않습니다. 표에 적은 조합 하나마다 적지 않은 조합이 220개쯤 있었던 셈입니다. 이틀 전(10월 4일)의 최고치 3,026종보다는 적습니다.
사실 오늘 주인공이 이 중 어떤 조합으로 들어왔는지는 모릅니다. 접속과 비밀번호를 이어 주는 정보가 기록에 없습니다.
옆 콘센트: 같은 이름, 세 번째 속
사실
어제는 다른 출발지 ATK-BDB53E도 파일을 받아 왔습니다. hxxp://160[.]119[.]66[.]206/bins/net.x86_64입니다. 이번엔 x86-64용, 그러니까 ARM과는 다른 모양의 플러그입니다. x86-64는 일반 PC와 서버에서 흔한 CPU 종류입니다.
사실 이 파일은 이름은 그대로인데 속이 세 번째로 바뀌었습니다. 파일 속을 확인할 때는 해시를 씁니다. 해시는 파일 내용 전체로 계산한 고유 번호입니다. 한 글자만 달라도 완전히 다른 값이 나옵니다.
| 날짜 | 해시 앞부분 | 크기 |
|---|---|---|
| 9/15 · 9/17 | cd6ccc5d… |
190,632바이트 |
| 9/20 · 9/22 · 9/27 | 2cebccdc… |
192,328바이트 |
| 10/6 | 64d8f97b… |
193,288바이트 |
사실
직전보다 960바이트 커졌습니다. 영어 글자 960자 정도입니다. 반면 같은 출발지의 설치 쪽지 kla.sh(3,241바이트, 39be6853…)는 9월 15일 처음 본 이후 22일째 한 글자도 바뀌지 않았습니다. 쪽지는 그대로 두고 플러그만 갈아 끼우는 모양입니다. 왜 바뀌었는지는 모릅니다.
두 번째 서버 앞은
사실 열리지 않는 두 번째 서버에는 누가 어느 문을 몇 번 두드렸는지만 남습니다.
| 문 | 무엇을 하는 문인가 | 포트 | 접촉 | 출발지 |
|---|---|---|---|---|
| VNC | 화면 공유 | 5900 | 36,631건 | 68곳 |
| RDP | 윈도우 원격 데스크톱 | 3389 | 753건 | 118곳 |
| ADB | 안드로이드 기기 연결 통로 | 기록 없음 | 403건 | 기록 없음 |
| SMB | 윈도우 파일 공유 | 445 | 178건 | 40곳 |
| LDAP | 회사 계정 목록 조회 | 389 | 141건 | 11곳 |
| MSSQL | 마이크로소프트 데이터베이스 | 1433 | 46건 | 35곳 |
사실
VNC가 전체 접촉 38,152건 중 **96.0%**입니다. 하루 36,631건이면 약 2.4초에 한 번입니다. 접속할 때 내미는 버전 표기 003.008의 비중은 96.8%였습니다. 10월 1일 63.2%, 10월 4일 94.1%에 이어 계속 커지고 있습니다. 가장 많이 온 세 곳(ATK-F81B56 6,436 · ATK-943F0E 6,435 · ATK-A9F1B3 6,422)은 서로 16건도 차이가 나지 않습니다.
사실
이 서버에 남은 파일 다섯 종 중 넷은 8월 28일 처음 기록된 뒤 해시가 그대로입니다. 어제는 새 별칭 ATK-53E31C가 보냈습니다. 나머지 하나(90,164바이트, 7e70323b…, ATK-3447C1)는 전에 없던 해시입니다.
어제 나온 값 — 받아 적을 것
방어에 쓰실 수 있게 그대로 옮깁니다. 이런 값을 IOC(침해 지표)라고 부릅니다. “이 값이 보이면 의심하라”는 표지입니다. 값을 누르면 복사됩니다. 주소는 망가뜨린 표기 그대로 둡니다. 설명 칸의 ’신규’와 ’count’를 보세요.
hxxp://45[.]198[.]224[.]34/ssh1,872바이트 Bash 스크립트 · count 32 · 출처 ATK-3ED4D8 · 신규 해시 · 신규 유포지25f4118ae989c009c26943b29ad08553509947a72ee2e4374b5f26a2ba0b0399위 ssh 스크립트 · 아카이브 33개 브리프에 없던 값hxxp://151[.]243[.]24[.]225/0uparm55,804바이트 ELF 32-bit ARM · 정적 링크 · stripped · count 13 · 출처 ATK-3ED4D8 · 신규03c77e109a9faa3e99b0f3e9b83eea4f5f7f030662c08c374cb37a04e92c74cc위 0uparm · 아카이브에 없던 값hxxp://151[.]243[.]24[.]225/0uparm548,112바이트 ELF 32-bit ARM · /lib/ld-uClibc.so.0 동적 링크 · stripped · count 4 · 출처 ATK-3ED4D8 · 신규e89455525bb56b1f18857515bbf237a0a160033bdd95b8c41f1f4ee22e8936e7위 0uparm5 · 아카이브에 없던 값hxxp://160[.]119[.]66[.]206/bins/net.x86_64193,288바이트 ELF 64-bit x86-64 · count 2 · 출처 ATK-BDB53E · 같은 URL 의 세 번째 해시 (보조)64d8f97bbbb1cfe1dde092d03baf0778385b16c441dafe2f758d50602cd00209위 net.x86_64 · 직전 2cebccdc… 보다 960바이트 큼사실
위 여섯 줄(ATK-3ED4D8 몫)은 모두 어제 처음 본 값입니다. 차단 목록을 관리한다면 어제 새로 올릴 줄이 여섯 줄 생겼습니다. 새 유포지 두 곳(45[.]198[.]224[.]34, 151[.]243[.]24[.]225)은 C-TAS 신고 대상입니다. C-TAS는 한국인터넷진흥원(KISA)의 위협 정보 공유 체계입니다. 확인된 건 전송 성공까지입니다. KISA 쪽에 실제로 올라갔는지는 따로 확인해야 합니다.
공격자가 쓴 수법을 국제 분류표에 대응시키면
MITRE ATT&CK은 공격 수법마다 번호를 붙여 둔 국제 목록입니다. 어제 본 행동을 그 번호에 맞추면 이렇습니다. ID를 누르면 원문 설명으로 갑니다.
- T1021.004Remote Services: SSH — ATK-3ED4D8 SSH 로그인 성공 5회추정
- T1110Brute Force — 하루 전체 로그인 시도 3,713회 기준. 주제 세션이 어떤 자격증명으로 들어왔는지는 기록에 없다추정
- T1105Ingress Tool Transfer — 유포지 두 곳에서 파일 수신, 다섯 세션 합계 24건추정
- T1222.002File and Directory Permissions Modification: Linux — '실행 권한 부여' 다섯 세션 모두추정
- T1059.004Command and Scripting Interpreter: Unix Shell — Bash 스크립트 ssh(1,872바이트)추정
사실
다섯 줄 모두 **[추정]**입니다. 우리 손에 있는 건 행동 분류와 횟수, 파일까지입니다. 친 명령 두 줄의 원문은 없습니다. 그래서 번호를 붙이는 일은 늘 해석입니다. 눈여겨볼 줄은 T1105입니다. 밖에서 플러그를 들여오는 단계가 이 번호입니다.
전에 이런 모양이 있었다
사실 Mirai 봇넷 (2016). 기본 계정으로 텔넷·SSH에 로그인했습니다. 그다음 CPU 종류별 실행파일을 받아 IoT 장비를 감염시켰습니다. IoT 장비는 공유기·CCTV처럼 인터넷에 연결된 작은 기기입니다. 봇넷은 이렇게 감염된 기기 수많은 대를 한꺼번에 조종하는 무리를 말합니다. (출처 유형: 정부 보안 경보 US-CERT Alert TA16-288A)
추정 닮은 건 수법까지입니다. 기본 계정으로 들어와 ARM 같은 장비용 플러그를 받아 오는 방식이 같습니다. 어제 파일이 Mirai 계열인지는 판정하지 않습니다. VirusTotal은 연동돼 있지 않고, 검체 분류 태그도 어제 재료에 없습니다.
그래서 뭘 해야 하나
플러그 이야기로 돌아가면 할 일은 세 가지로 모입니다. 콘센트를 아무나 쓰게 두지 말 것, 비밀번호 대신 열쇠로 잠글 것, 밖에서 플러그를 못 들여오게 할 것. 브리프가 꼽은 여섯 가지를 차례로 봅니다.
사실 1. 관리 포트를 인터넷에 직접 열어 뒀다 · 가능성 높음 하루 동안 188곳이 SSH 문(2222)을 두드렸습니다. 세션은 3,271건이었습니다. 한 출발지는 8분 37초 사이 다섯 번 로그인에 성공했습니다.
추정 운영 서버였다면 바깥 누구나 비밀번호 입력 단계까지 바로 옵니다. 그리고 어제 본 “받고·표시하고·실행하고” 세 단계가 진짜 서버에서 그대로 일어납니다.
사실
2. 기본 계정·쉬운 비밀번호를 그대로 쓴다 · 가능성 높음
admin/admin은 20곳에서 60회, root/root는 8곳에서 27회, root/123456은 8곳에서 24회 들어왔습니다.
추정 위 표에 있는 비밀번호라면 첫 시도에 열립니다. 그다음은 어제처럼 1분도 안 돼 밖에서 파일을 받아 실행 표시를 붙이는 데까지 갑니다.
사실 3. 비밀번호 로그인을 허용하고 열쇠 방식을 안 쓴다 · 가능성 높음 로그인 시도 3,713회, 값을 적지 않은 조합만 2,213종 이상입니다. 어제 공격은 비밀번호 맞히기였습니다.
추정 열쇠 방식(키 인증)은 비밀번호 대신 내 컴퓨터에만 있는 열쇠 파일로 들어가는 방법입니다. 이것만 허용했다면 3,713번의 시도는 전부 의미가 없었습니다. 비밀번호를 허용하면 그중 하나만 맞아도 뚫립니다.
사실 4. 반복 시도 차단(fail2ban 등)이 없다 · 가능성 낮음 다섯 세션 모두 로그인에 성공했습니다. 세션 간격은 17.8초~2분 4초였습니다. 이 출발지가 몇 번 틀렸는지는 기록에 없습니다.
추정 fail2ban은 “몇 번 틀리면 한동안 막는” 도구입니다. 맞는 비밀번호로 바로 들어오는 접속은 막지 못합니다. 그래서 어제 주인공에게는 효과가 적었을 겁니다. 다만 “같은 곳에서 10분 안에 다섯 번 접속” 같은 접속 빈도 제한이라면 두 번째부터 늦출 수 있었습니다.
사실
5. 서버가 밖으로 나가는 연결을 막지 않는다 · 가능성 높음
ssh 스크립트 32회, 0uparm 13회, 0uparm5 4회. 모두 유포지 두 곳에서 HTTP(웹 주소로 파일을 주고받는 방식)로 받았습니다. 어제 일어난 일은 전부 서버가 바깥으로 연결을 연 다음에 나왔습니다.
추정 서버가 외부 웹 주소에 마음대로 나갈 수 있으면 장비용 실행파일이 들어와 실행 표시까지 받습니다. 그 뒤 봇넷의 일원으로 쓰일 수 있습니다. 실행파일이 실제로 무엇을 하는지는 확인하지 못했습니다. 플러그를 못 들여오면 모양이 맞든 안 맞든 꽂을 일이 없습니다.
사실 6. 기록을 바깥에 모으지 않는다 · 가능성 중간 하루 전체에서 ’흔적 삭제’가 14회 있었습니다. 오늘 주인공이 아니라 다른 접속에서 나온 숫자입니다.
추정 기록을 서버 안에만 두면 침입자가 지운 뒤에는 언제 들어와 무엇을 받아 갔는지 되살리기 어렵습니다. 어제 “앞자리 같은 모양이 네 번째”라고 말할 수 있었던 것도 9월 기록이 따로 남아 있어서였습니다.
같은 날 이야기를 60초 영상으로도 만들었습니다. 영상은 “다섯 번 모두 맞는 번호로 열렸다”는 한 가지에 집중했습니다. 이 글은 그때 들어온 플러그의 모양과 출처를 펼쳤습니다.
우리가 모르는 것
이 블로그가 다른 곳과 다른 지점입니다. 아는 것만큼 모르는 것도 적습니다.
다섯 번의 방문에 대해
- [확인 불가] 다섯 번 모두 어떤 아이디·비밀번호로 들어왔는지 모릅니다. 접속과 비밀번호를 잇는 정보가 기록에 없습니다.
- [확인 불가] 매번 친 명령 두 줄의 내용을 모릅니다. 입력 기록(TTY)이 있다는 것만 알고, 내용은 브리프에 없습니다.
- [확인 불가] 받기·실행 표시·실행이 어떤 순서로 일어났는지 모릅니다. 행동 분류에는 순서가 없습니다.
- [확인 불가] 파일 기록 49회와 다섯 세션의 다운로드 24건이 다릅니다. 그래서 다섯 번 말고도 더 들어왔다고 추정합니다. 몇 번, 언제였는지는 모릅니다.
- [추정] 세션별 접속 포트는 기록에 없습니다. 포트 2222 수(3,271)와 SSH 수(3,271)가 정확히 같아서 SSH를 2222로 맞췄습니다.
플러그와 가게에 대해
- [확인 불가]
ssh쪽지가0uparm플러그들을 불러왔는지 모릅니다. 쪽지 내용과 다운로드 시각이 없습니다. - [확인 불가]
0uparm·0uparm5가 무슨 일을 하는지 모릅니다. 서비스 마비 공격(DDoS)인지, 채굴인지, 중계 서버(프록시)인지 판단할 근거가 없습니다. VirusTotal은 연동돼 있지 않고, MalwareBazaar 태그도 없습니다. - [확인 불가]
0uparm과, 압축을 풀어야 보이는31[.]77[.]227[.]121/bins/경로의 ‘parm’ 계열은 이름이 닮았습니다. 하지만 유포지·해시가 이어지지 않습니다. 같은 계열이라고 쓸 근거가 없습니다. 그 경로 12건은 8월 17일부터 반복된 지표라 배경으로만 둡니다. - [확인 불가] 들어온 주소(
45.198.x.x)와 쪽지 가게(45[.]198[.]224[.]34)는 앞 두 자리만 같습니다. 가림 처리 때문에 같은 컴퓨터인지, 같은 운영자인지 판단할 수 없고, 판단해서도 안 됩니다. - [확인 불가] ’앞자리 일치 네 번째’는 브리프 보관함에서 9/7·9/8·9/15를 찾은 결과입니다. 보관함에 없는 날짜(9/9·9/11·9/12 등)는 세지 못했습니다.
- [확인 불가]
net.x86_64의 해시가 세 번째로 바뀐 이유(기능 변경인지, 다시 포장한 건지)는 모릅니다. 파일 내용이 브리프에 없습니다.
두 번째 서버에 대해
- [확인 불가] 서비스별 출발지 수를 더한 값(272)과 전체 고유 출발지(296)의 관계를 모릅니다. 한 출발지가 여러 문을 두드렸는지도 셀 수 없습니다. 겹치는 정도를 알려 주는 정보가 없습니다.
- [추정] 가장 많이 온 세 곳의 숫자가 거의 같아서 같은 일정으로 훑은 것으로 보입니다. 같은 도구인지는 이 서버에 지문이 없어 확인할 수 없습니다.
- [추정] 이 서버의 파일들이 안드로이드 통로(ADB)로 들어왔다는 건 추정입니다. 어느 통로로 왔는지 표기가 없습니다.
일부러 빼거나 연결하지 않은 것
- [제외] 디스코드 웹훅 주소는 9/15·9/20 브리프에 이미 나온 반복 지표입니다. 주소 안에 토큰이 들어 있어 값을 싣지 않았습니다.
- [확인 불가] C-TAS 신고는 전송 성공만 확인됐습니다. KISA 적재 여부는 따로 확인해야 합니다.
- [제외] 같은 이름(
libssh_0.9.6)을 쓰는 큰 무리와 오늘 주인공을 같은 편이나 다른 편으로 묶지 않았습니다. 지문이 다르다는 건 도구 설정이 다르다는 뜻까지입니다.
아예 판단하지 않는 것
- 통신사·조직(ASN·ISP) — 관련 데이터베이스가 없습니다. 추정하지 않습니다.
- 지리 위치 — 같은 이유로 모릅니다. IP 지리정보는 애초에 누가 했는지 가리는 근거가 되지 못합니다. 이 글은 어떤 국가·기업·개인도 공격자로 지목하지 않습니다.
- VPN·Tor·클라우드 여부 — 판별할 수단이 없습니다.
- VirusTotal — 연동돼 있지 않습니다. 검체 분류는 MalwareBazaar 태그를 쓰는데, 어제 재료에는 태그가 없습니다.
- 접속 프로그램 문자열(User-Agent) — 두 서버 모두 웹(HTTP) 서버가 아닙니다. 첫 번째는 SSH·텔넷, 두 번째는 SMB·RDP·VNC·MSSQL·LDAP·ADB입니다.
- 취약점 번호(CVE) 연결 — SSH·텔넷 공격은 대부분 특정 취약점을 참조하지 않습니다. 두 번째 서버도 접속 규칙을 맞추는 단계라 마찬가지입니다.
어제 같은 손님이 9분이 안 되는 사이 다섯 번 들어왔습니다. 매번 두 마디만 하고, 두 가게에서 플러그를 받아 왔습니다. 그 플러그는 서버 콘센트 모양이 아니었습니다. 공유기나 카메라 같은 작은 기기의 모양으로 보입니다.
“우리 서버엔 안 맞으니 괜찮다”고 넘기기 쉽습니다. 그런데 이 손님은 콘센트 모양을 확인하지 않았습니다. 둘러보는 정찰 없이 일단 꽂고 갔습니다. 어느 집이든 들어갈 수만 있으면 같은 플러그를 꽂아 본다는 뜻으로 읽힙니다. 집 안 어딘가에 그 모양의 콘센트가 있다면, 그 기기의 비밀번호부터 오늘 확인할 차례입니다.
관측일은 2026년 10월 6일(UTC 기준 하루)이고, 이 글은 다음 날 정리했습니다. 출발지 IP는 브리프에 가림 처리된 형태(45.198.x.x) 그대로 옮겼고 복원하지 않았습니다. 주소는 실수로 접속되지 않도록 디팽(hxxp://, [.]) 상태를 본문과 IOC 블록 모두에서 유지했고, 토큰이 든 웹훅 주소는 싣지 않았습니다. 자격증명은 서로 다른 IP 3곳 이상에서 반복 관측된 조합 10개만 원문 인용했고, 나머지 2,213종은 개수만 밝히고 값은 적지 않았습니다. 통신사·국적·VPN 여부처럼 우리에게 계측 수단이 없는 항목은 추정하지 않고 “모른다”로 남겨 뒀습니다.
