Linux 시스템 보안 기초 · 35/50편

이 글은 리눅스 시스템 기초 · 파일 · 권한 · 사용자 관리 · 서비스 · 프로세스 관리 시리즈를 선행 학습으로 두고, 동일한 개념을 보안관제(SOC) 관점에서 한 단계 확장합니다.

선행 학습

1. 들어가며

26~35편에서 개별 지속성 벡터를 봤습니다. 실제 침해는 이들 중 여러 개를 동시에 심어 둡니다 — 하나를 지워도 다른 것으로 되살아나게 말이죠. 이번 편은 모든 벡터를 하나의 체크리스트로 묶어 백도어 종합 점검을 합니다.

2. 핵심 개념

백도어 지속성 6대 벡터(이 시리즈에서 다룬 것):

#벡터점검 위치
1프로세스은닉/위장 프로세스(27편)
2서비스systemd Unit(30편)
3cron모든 cron 위치(31편)
4SSH 키authorized_keys(35편)
5shell 초기화bashrc/profile(34편)
6의심 바이너리SUID/capability/임시경로(18·22편)

핵심: 여러 벡터를 함께 봐야 합니다. 하나만 보면 반드시 놓칩니다.

침입 성공
   │ (여러 지속성 동시 설치)
   ├── cron: */5 재접속
   ├── systemd: updater.service
   ├── authorized_keys: 공격자 키
   ├── .bashrc: 로그인 트리거
   └── /tmp/.x: 은닉 프로세스
        │
        └ 하나 제거해도 나머지로 부활 → 전수 점검 필수

3. 동작 원리

숙련된 공격자는 '단일 실패점'을 피하려 여러 지속성을 중첩합니다. 방어자가 악성 cron을 지워도 systemd 서비스가 남아 있고, 그것도 지우면 authorized_keys 키로 재침입합니다. 그래서 백도어 대응은 '하나 찾고 끝'이 아니라 '모든 벡터를 전수 점검하고 동시에 제거'해야 합니다.

이 종합 점검은 한 번에 실행할 수 있도록 스크립트화하는 것이 실무적입니다. 아래 명령을 묶으면 빠른 1차 스크리닝 도구가 됩니다.

4. 명령어 실습

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

5. 실행 결과

종합 스크리닝의 정상 출력 예입니다(실습 컨테이너 실제 실행 항목 혼합). (실제 캡처 + 예시 혼합, 항목별 표기)

== [1] UID 0 계정 ==
root                     # (실제 캡처: root 하나 → 정상)
== [2] 은닉 프로세스(deleted exe) ==
(출력 없음)              # (실제 캡처: 정상)
== [7] 신규 SUID ==
/usr/bin/passwd ... /usr/bin/sudo   # (실제 캡처: 표준 SUID만)

각 항목이 비어 있거나 표준값만 나오면 정상입니다. 하나라도 의심 항목이 나오면 해당 편의 상세 절차로 정밀 분석하고, 모든 항목을 끝까지 확인해 중첩 지속성을 놓치지 않습니다.

6. 보안 관점 — 정상 사용 vs 악용

  • 정상: 모든 벡터가 기준선과 일치.
  • 침해 징후: 위 항목 중 하나라도 이상 → 다른 벡터도 반드시 재점검.

백도어 대응의 철칙: '하나 찾으면 더 있다고 가정한다'. 중첩 지속성 때문에 부분 제거는 재감염으로 이어집니다. 완전한 대응은 전수 확인 후 동시 제거, 심한 경우 재설치(clean rebuild)입니다.

7. 탐지 방법

  • 6대 벡터 전수 스크리닝(위 스크립트)
  • 각 벡터의 기준선 대비 diff
  • 발견 시 다른 벡터 재점검(중첩 가정)

8. SOC 관점 — SIEM · Wazuh · IOC

이 종합 점검은 침해사고 초동 대응(48편)의 '지속성 확인' 단계와 그대로 연결됩니다. Wazuh는 rootcheck·SCA·FIM으로 여러 벡터를 자동 점검하고, SIEM은 각 벡터의 이벤트를 하나의 사건으로 상관분석합니다. 발견된 모든 IOC(계정·키·URL·해시·경로)를 통합 관리해 중첩 지속성 전체를 제거합니다.

9. 실습 체크리스트

[ ] 6대 벡터를 하나의 스크립트로 전수 점검
[ ] 각 벡터 기준선 대비 확인
[ ] 이상 발견 시 나머지 벡터 재점검
[ ] 중첩 지속성 동시 제거 계획

10. 핵심 정리

  • 실제 침해는 여러 지속성을 중첩 설치한다.
  • 백도어 점검은 6대 벡터를 전수로 봐야 한다.
  • 부분 제거는 재감염으로 이어진다.
  • '하나 찾으면 더 있다'가 대응의 철칙이다.
  • 발견한 모든 IOC를 통합 관리해 동시 제거한다.

11. 다음 편

다음 편에서는 36. Linux 네트워크 보안 구조 를 다룹니다. Part 5로 넘어가, 프로세스가 외부와 통신하는 통로 — 네트워크 보안 구조를 봅니다.


본 실습은 격리된 테스트 VM(Rocky Linux / Ubuntu, VMware) 및 테스트 계정 환경을 기준으로 하며, 운영 서버를 대상으로 하지 않습니다. 실행 결과는 실제 캡처와 예시 출력을 명확히 구분해 표기합니다.

profile
코드에 숨겨진 위협을 읽고 AI로 보안의 미래를 설계합니다. 프론트엔드 개발 경험을 자산 삼아 더 견고하고 지능적인 보안 운영 시스템을 구축해 나가는 과정을 기록합니다

0개의 댓글