020. Linux 서버 보안 — /var/tmp·/dev/shm 보안 점검

changseop lee·3일 전

시스템 보안 · 취약점 › A. Linux 서버 보안 설정 · 20/50편 (전체 020/450)
학습 단계: 2단계 · 설정 및 점검
실습 표기: 이 글의 명령어·출력·로그는 로컬 VMware 테스트 VM(Rocky Linux 9 / Ubuntu 22.04) 기준의 「실습 예시」이며, IP·계정·호스트명은 가상의 값입니다.

선행 학습

1. 개념

누구나 쓸 수 있는(world-writable) 대표 경로는 세 곳이며, 보존 특성이 다릅니다.

경로저장 위치재부팅 후공격자가 선호하는 이유
/tmp디스크 또는 tmpfstmpfs면 삭제가장 흔한 작업 공간
/var/tmp디스크유지재부팅 후에도 도구·지속성 파일 유지
/dev/shmtmpfs(메모리)삭제디스크 흔적 최소화, 점검 누락이 잦음
/tmp 를 noexec 로 막음
   ↓ 공격자 우회
/var/tmp 또는 /dev/shm 에 파일 배치 → 실행
   ↓
세 경로를 "한 묶음"으로 점검해야 하는 이유

2. 왜 중요한가

  • /tmp만 하드닝하면 공격자는 다른 world-writable 경로로 옮겨 갑니다. 점검과 탐지 규칙은 항상 세 경로 세트로 적용해야 합니다.
  • /var/tmp는 systemd-tmpfiles 정책상 오래된 파일만 정리(기본 30일)되므로, 그 사이 도구가 남아 있을 수 있습니다.
  • /dev/shm은 메모리 기반이라 디스크 포렌식에서 보이지 않습니다. 라이브 상태에서 확인하지 않으면 증거가 사라집니다.

3. 핵심 명령어 / 설정

명령용도
findmnt /var/tmp /dev/shm마운트 여부·옵션
find /tmp /var/tmp /dev/shm -xdev -type f -printf '%TY-%Tm-%Td %TH:%TM %u %m %p\n'파일 목록(시간·소유자·권한)
find /tmp /var/tmp /dev/shm -type f -perm -u+x실행 권한 파일
ls -l /proc/*/exe 2>/dev/null | grep -E '/tmp/|/var/tmp/|/dev/shm/'임시 경로에서 실행 중인 프로세스
systemd-tmpfiles --cat-config | grep -E 'tmp|shm'자동 정리 정책

4. 실습 (실습 예시)

# 1) 마운트 옵션 점검
findmnt -no TARGET,OPTIONS /tmp /var/tmp /dev/shm

# 2) /dev/shm 옵션 강화 (/etc/fstab)
echo 'tmpfs /dev/shm tmpfs defaults,nodev,nosuid,noexec 0 0' | sudo tee -a /etc/fstab
sudo mount -o remount /dev/shm

# 3) /var/tmp를 /tmp와 같은 옵션으로: bind 마운트 예시
echo '/tmp /var/tmp none bind 0 0' | sudo tee -a /etc/fstab
# 주의: /var/tmp는 재부팅 후 유지가 원래 목적이므로 서비스 영향 검토 후 적용

# 4) 세 경로의 실행 파일·실행 중 프로세스 점검
sudo find /tmp /var/tmp /dev/shm -xdev -type f -perm -u+x -ls 2>/dev/null
sudo ls -l /proc/*/exe 2>/dev/null | grep -E '/tmp/|/var/tmp/|/dev/shm/'

PostgreSQL처럼 /dev/shm을 공유 메모리로 쓰는 서비스도 있으므로 파일 존재 자체가 이상은 아닙니다. 소유자·이름·실행 권한으로 판단합니다.

5. 정상 상태

$ findmnt -no TARGET,OPTIONS /dev/shm
/dev/shm rw,nosuid,nodev,noexec,inode64
$ sudo find /tmp /var/tmp /dev/shm -xdev -type f -perm -u+x -ls
$

실행 권한 파일이 없고, /dev/shm에는 서비스 소유의 공유 메모리 파일만 있는 상태가 정상입니다.

6. 이상 상태

$ sudo find /var/tmp /dev/shm -xdev -type f -perm -u+x -printf '%TY-%Tm-%Td %TH:%TM %u %m %p\n'
2026-10-01 02:31 apache 755 /var/tmp/.font-unix/fc
2026-10-01 02:33 apache 755 /dev/shm/.s
$ sudo ls -l /proc/*/exe 2>/dev/null | grep /dev/shm
lrwxrwxrwx. 1 apache apache 0 Oct  1 02:34 /proc/8102/exe -> /dev/shm/.s
  • 정상 디렉터리처럼 보이는 .font-unix 아래 실행 파일 → 이름 위장
  • /dev/shm/.s가 현재 실행 중 → 프로세스 메모리·네트워크 연결을 먼저 수집해야 합니다(재부팅·종료 시 소멸).

7. 로그 분석 (분석 방법)

019편의 감시 규칙을 세 경로로 확장했을 때 남는 기록입니다(가상의 예시 로그).

type=SYSCALL msg=audit(1759728780.210:1801): arch=c000003e syscall=59 success=yes exit=0 ppid=8050 pid=8102 auid=4294967295 uid=48 comm=".s" exe="/dev/shm/.s" key="exec_tmp"
type=SYSCALL msg=audit(1759728790.004:1803): arch=c000003e syscall=42 success=yes exit=0 pid=8102 uid=48 comm=".s" exe="/dev/shm/.s" key="net_connect"
type=SOCKADDR msg=audit(1759728790.004:1803): saddr=02000BB8C0A8384D0000000000000000
필드해석
exe="/dev/shm/.s"메모리 경로에서 실행 성공(noexec 미적용 상태)
syscall=42connect(외부 연결 시도)
saddr=0200 0BB8 C0A8384DAF_INET(02), 포트 0x0BB8=3000, IP C0.A8.38.4D = 192.168.56.77

ausearch -i를 쓰면 SOCKADDR이 saddr={ fam=inet laddr=192.168.56.77 lport=3000 }처럼 해석되어 출력됩니다.

8. SOC 관제 포인트

  • 임시 경로 세 곳에서의 실행·외부 연결을 동일 규칙 그룹으로 관리합니다.
  • /dev/shm 실행 프로세스가 발견되면 종료보다 라이브 증거 수집을 먼저 합니다.
  • 서비스 계정 소유의 숨김 실행 파일은 정탐 가능성이 매우 높습니다.

9. 탐지 규칙

# 019편 규칙에 이어서
-w /var/tmp/ -p x -k exec_tmp
-w /dev/shm/ -p x -k exec_tmp
-a always,exit -F arch=b64 -S connect -F uid=48 -k net_connect   # Rocky apache 예시
<rule id="100270" level="12">
  <if_group>audit</if_group>
  <field name="audit.key">exec_tmp</field>
  <field name="audit.exe">^/dev/shm/</field>
  <description>/dev/shm에서 프로세스 실행 성공: $(audit.exe)</description>
</rule>

모든 connect를 감사하면 로그가 폭증하므로, 서비스 계정 UID처럼 범위를 좁혀 적용합니다.

10. 대응 방법

  1. 초기 확인 — 임시 경로의 실행 파일·실행 중 프로세스·외부 연결을 목록화합니다.
  2. 범위 확인 — 같은 파일명·해시·연결 대상 IP가 다른 서버에 있는지 확인합니다.
  3. 증거 확보 — /proc/PID/(exe, cmdline, maps, fd)와 파일 사본을 라이브 상태에서 먼저 확보합니다.
  4. 차단/조치 — 프로세스 종료, 파일 격리, 연결 대상 IP 차단을 진행합니다.
  5. 재발 방지 — 세 경로 모두 마운트 옵션·실행 감시를 적용하고 기준선에 포함합니다.

11. 핵심 정리

경로특성 / 점검 포인트
/tmp일반 작업 공간 / noexec·실행 감시
/var/tmp재부팅 후 유지 / 장기 잔존 도구
/dev/shm메모리 기반 / 라이브 수집 필수
실행 중 확인ls -l /proc/*/exe | grep 임시경로
면접 포인트"/tmp만 막으면 공격자는 /var/tmp, /dev/shm으로 이동"

12. 다음 편 예고

다음 편 021. Linux 서버 보안 — /etc 디렉터리 변경 관리 에서는 설정 파일이 모여 있는 /etc 디렉터리의 변경 관리 방법을 다룹니다.


이전 편: 019. Linux 서버 보안 — /tmp 보안 — 마운트 옵션 nodev·nosuid·noexec
📚 시리즈 전체 보기: 시스템 보안 · 취약점

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

0개의 댓글