# 51124 bot 계정 SSH 침해 대응 및 박멸 기록

**날짜**: 2026-02-26
**작성자**: admin
**관련 파일**: `/var/log/auth.log*`, `/home/bot/.configrc7/*`, `/var/spool/cron/crontabs/bot`

---

## 문제 상황
- 51124 서버에서 비정상 고메모리 프로세스(`kauditd0`) 발견
- 실체 확인 결과 `/home/bot/.configrc7/a/kswapd00` 실행 파일로 위장 동작
- `bot` crontab에 재실행 지속성(`*/30 * * * * /tmp/.kswapd00 || /home/bot/.configrc7/a/kswapd00`) 존재

## 침해 지표(IOC)
- 프로세스/파일
  - `kauditd0`, `kswapd00`, `edac0`
  - `/home/bot/.configrc7/a/*`, `/home/bot/.configrc7/b/*`
  - `/tmp/.kswapd00`, `/tmp/.X28-unix/.rsync/c/aptitude`
- SSH/지속성
  - `~/.ssh/authorized_keys`에 `mdrfckr` 주석의 `ssh-rsa` 키 주입 흔적
  - `chattr +/-ia`를 이용한 `.ssh` 잠금 시도
- 네트워크
  - 공격 유입 성공 IP: `179.43.139.82`
  - 감염 프로세스 외부 연결 IP: `179.43.139.85:80`

## 로그 기반 사실 확인
- `2026-02-18 18:46:05 KST`: `Accepted password for bot from 179.43.139.82`
- `2026-02-18 18:54:06 KST`: `Accepted password for bot from 179.43.139.82`
- `root` 계정 `Accepted` 로그인 성공 기록은 보관 로그 기준 미검출
- `admin` 계정은 정상 운영 접속으로 보이는 `Accepted` 기록 다수 존재

## 원인 판정
- SSH 비밀번호 인증 허용 상태(`passwordauthentication yes`)에서 `bot` 계정 비밀번호 기반 침입 성공
- `bot` 계정이 `sudo`/`docker` 권한 보유(`sudo ALL`) 상태여서 감염 스크립트 설치 및 지속성 확보가 가능했던 구조

## 조치 내역
1. 악성 프로세스 종료
   - `kauditd0/kswapd00/edac0` 관련 프로세스 킬
2. 지속성 제거
   - `crontab -u bot -r`로 `bot` 사용자 크론 제거
3. 악성 파일 제거
   - `/home/bot/.configrc7`, `/tmp/.kswapd00`, `/tmp/.X28-unix/.rsync` 삭제
4. 백도어 키 제거
   - `/home/bot/.ssh/authorized_keys`의 `mdrfckr` 키 제거
   - 백업: `/home/bot/.ssh/authorized_keys.bak.20260226212628`
5. 계정 비밀번호 교체
   - `2026-02-26` 기준 `admin`, `root`, `bot` 비밀번호 변경 완료

## 검증 결과
- `kauditd0/kswapd00/edac0` 프로세스 미검출
- `bot` crontab 미존재 확인
- IOC 경로(`/home/bot/.configrc7`, `/tmp/.kswapd00`, `/tmp/.X28-unix/.rsync`) 미존재 확인
- `mdrfckr` 키 미검출 확인
- 서비스 영향 없음: `docker ps` 전체 `Up`, `curl http://localhost:8001/health` HTTP 200

## 남은 리스크
- 보관 로그 한계로 과거 데이터 조회/유출 여부를 100% 확정할 수 없음
- `bot` 계정으로 읽기 접근된 비밀값(API 키, 토큰, DB 접속정보)은 노출 가능성 배제 불가

## 후속 권고
1. SSH 하드닝
   - `PasswordAuthentication no`
   - `AllowUsers admin` 등 접속 사용자 제한
2. 계정 정리
   - `bot` 계정 업무 불필요 시 잠금(`usermod -L`) 또는 삭제
   - `sudo`/`docker` 최소 권한 재설계
3. 비밀값 로테이션
   - `.env` 기반 토큰/Gitea 토큰/외부 API 키 전면 교체
4. 모니터링 강화
   - `auth.log`의 `Accepted password` 이상 탐지 알림
   - 크론/시스템 서비스 신규 등록 이벤트 모니터링

## 교훈
- 비밀번호 SSH 허용 + 고권한 사용자 조합은 자동화 봇넷 침해에 매우 취약함
- 박멸은 `프로세스 종료`만으로 끝나지 않고 `크론/파일/SSH 키`까지 함께 제거해야 재감염을 막을 수 있음
- 침해 대응 후에는 서비스 정상 여부(`docker ps`, healthcheck)와 보안 후속조치를 같은 작업 단위로 처리해야 함
