Linux 시스템 보안 기초 · 35/50편
이 글은
리눅스 시스템 기초·파일 · 권한 · 사용자 관리·서비스 · 프로세스 관리시리즈를 선행 학습으로 두고, 동일한 개념을 보안관제(SOC) 관점에서 한 단계 확장합니다.
26~35편에서 개별 지속성 벡터를 봤습니다. 실제 침해는 이들 중 여러 개를 동시에 심어 둡니다 — 하나를 지워도 다른 것으로 되살아나게 말이죠. 이번 편은 모든 벡터를 하나의 체크리스트로 묶어 백도어 종합 점검을 합니다.
백도어 지속성 6대 벡터(이 시리즈에서 다룬 것):
| # | 벡터 | 점검 위치 |
|---|---|---|
| 1 | 프로세스 | 은닉/위장 프로세스(27편) |
| 2 | 서비스 | systemd Unit(30편) |
| 3 | cron | 모든 cron 위치(31편) |
| 4 | SSH 키 | authorized_keys(35편) |
| 5 | shell 초기화 | bashrc/profile(34편) |
| 6 | 의심 바이너리 | SUID/capability/임시경로(18·22편) |
핵심: 여러 벡터를 함께 봐야 합니다. 하나만 보면 반드시 놓칩니다.
침입 성공
│ (여러 지속성 동시 설치)
├── cron: */5 재접속
├── systemd: updater.service
├── authorized_keys: 공격자 키
├── .bashrc: 로그인 트리거
└── /tmp/.x: 은닉 프로세스
│
└ 하나 제거해도 나머지로 부활 → 전수 점검 필수
숙련된 공격자는 '단일 실패점'을 피하려 여러 지속성을 중첩합니다. 방어자가 악성 cron을 지워도 systemd 서비스가 남아 있고, 그것도 지우면 authorized_keys 키로 재침입합니다. 그래서 백도어 대응은 '하나 찾고 끝'이 아니라 '모든 벡터를 전수 점검하고 동시에 제거'해야 합니다.
이 종합 점검은 한 번에 실행할 수 있도록 스크립트화하는 것이 실무적입니다. 아래 명령을 묶으면 빠른 1차 스크리닝 도구가 됩니다.
echo '== [1] UID 0 계정 =='; awk -F: '$3==0{print $1}' /etc/passwd
echo '== [2] 은닉 프로세스(deleted exe) =='; sudo ls -l /proc/*/exe 2>/dev/null | grep -i deleted
echo '== [3] 임시경로 실행 =='; sudo ls -l /proc/*/exe 2>/dev/null | grep -E '/tmp|/dev/shm'
echo '== [4] enabled 의심 서비스 =='; sudo grep -rEi 'tmp|curl|base64' /etc/systemd/system 2>/dev/null
echo '== [5] cron 의심 =='; sudo grep -rEi 'curl|wget|base64|/tmp' /etc/cron* /var/spool/cron 2>/dev/null
echo '== [6] authorized_keys =='; sudo find /home /root -name authorized_keys -exec wc -l {} \;
echo '== [7] 신규 SUID =='; sudo find / -xdev -perm -4000 -type f 2>/dev/null | sort
종합 스크리닝의 정상 출력 예입니다(실습 컨테이너 실제 실행 항목 혼합). (실제 캡처 + 예시 혼합, 항목별 표기)
== [1] UID 0 계정 ==
root # (실제 캡처: root 하나 → 정상)
== [2] 은닉 프로세스(deleted exe) ==
(출력 없음) # (실제 캡처: 정상)
== [7] 신규 SUID ==
/usr/bin/passwd ... /usr/bin/sudo # (실제 캡처: 표준 SUID만)
각 항목이 비어 있거나 표준값만 나오면 정상입니다. 하나라도 의심 항목이 나오면 해당 편의 상세 절차로 정밀 분석하고, 모든 항목을 끝까지 확인해 중첩 지속성을 놓치지 않습니다.
백도어 대응의 철칙: '하나 찾으면 더 있다고 가정한다'. 중첩 지속성 때문에 부분 제거는 재감염으로 이어집니다. 완전한 대응은 전수 확인 후 동시 제거, 심한 경우 재설치(clean rebuild)입니다.
이 종합 점검은 침해사고 초동 대응(48편)의 '지속성 확인' 단계와 그대로 연결됩니다. Wazuh는 rootcheck·SCA·FIM으로 여러 벡터를 자동 점검하고, SIEM은 각 벡터의 이벤트를 하나의 사건으로 상관분석합니다. 발견된 모든 IOC(계정·키·URL·해시·경로)를 통합 관리해 중첩 지속성 전체를 제거합니다.
[ ] 6대 벡터를 하나의 스크립트로 전수 점검
[ ] 각 벡터 기준선 대비 확인
[ ] 이상 발견 시 나머지 벡터 재점검
[ ] 중첩 지속성 동시 제거 계획
다음 편에서는 36. Linux 네트워크 보안 구조 를 다룹니다. Part 5로 넘어가, 프로세스가 외부와 통신하는 통로 — 네트워크 보안 구조를 봅니다.
본 실습은 격리된 테스트 VM(Rocky Linux / Ubuntu, VMware) 및 테스트 계정 환경을 기준으로 하며, 운영 서버를 대상으로 하지 않습니다. 실행 결과는 실제 캡처와 예시 출력을 명확히 구분해 표기합니다.