정보보안 - 리눅스 사고 분석
리눅스 침해사고 분석
- 기본 정보 수집
- OS 종류, 커널 버전
- 사용 용도
- 운영중인 서비스
- 네트워크 접속 현황
- 보안 패치 적용 현황
- 네트워크 구성 형태 및 보안 장비 운영 현황
- 휘발성 정보 수집
- 프로세스 확인
ps -ef
- process 실행자
- PID
- 실행 일시
- 프로세스명
lsof
: List open file
- System 에서 동작중인 Process 에 의해서 열린 파일들에 대한 정보를 보여주는 명령
ps
명령어가 변조된 경우 공격자가 구동시킨 프로세스를 볼 수 없음
- 네트워크 상태
netstat -an
- 현재 시스템의 네트워크 연결 상태 확인
- 발신지 주소 확인
nmap
: network mapper
- 네트워크 보안 유틸리티
- 대규모 네트워크를 고속으로 스캔
-sT
: tcp 스캔
-p
: 특정 포트 점검
nmap -sT -p [포트번호] [ip주소]
fuser
- 어떤 프로세스에서 포트를 열었는지 확인
- 현재 사용중인 파일, 소켓이 사용하는 프로세스 확인
fuser 6001/tcp
- 위 명령어의 결과 (예:pid 6333) 를 활용해
ps [pid]
명령어 사용
- 사용자 로그인 상태
w
- 현재 시스템에 성공적으로 로그인한 사용자에 대한 Snapshot 제공
- 해당 사용자 목록 중에
w
명령어에 없는 (성공적으로 로그인) 사용자는 백도어를 이용했을 확률이 있음
- 사용자들이 어디에서 로그인을 했는지, 어떤 작업을 하는지 알 수 있음
utmp
: 정보 파일
- 공격자를 규정하기 위해 자세히 봐야할 정보
- 접속 계정이 정상적인지 확인
- 접속출처가 정상 위치인지 확인 (내부 IP 주소 이외에 접속, 국외 IP 주소 접속 등)
- 접속 사용자의 정상적인 행위인지 확인 (Scan 도구 사용, 다른 서버에 서비스거부공격 등)
- 프로세스 확인, 네트워크 상태를 확인해 시스템의 상황을 파악하고 공격자의 단서를 찾음, 이후 세부사항 확인
- 상세분석
- 패스워드 파일 분석
/etc/passwd
- 관리자 권한을 가진 계정이 있는지 확인 : uid=0
user1:x:0:0::/home/user1:/bin/bash
- 새로 생성된 계정이나 패스워드가 없는 계정 확인
- 로그 파일 분석
- 사고가 일어난 뒤의 로그는 100% 신뢰할 수는 없다. 하지만 흔적은 어딘가에 남아있다.
- 로그파일 생성일자, 변경일자 확인
- 공격자는 공격을 통해 발생하는 시스템로그, 접속로그등을 삭제/변경함
- 주요 로그 파일
utmp
: 현재 시스템에 로그인한 사용자의 정보
wtmp
: 과거에 로그인했던 사용자의 정보
messages
: 시스템 장애 정보 + 공격으로 인한 정보
- 웹로그 파일
access_log
- Host (도메인,IP주소) : 웹서버에 접속한 IP 주소
- Identification : 사용자의 이름, - 로 표시
- User Authentication : (사용자 인증이 된 경우) 패스워드가 표시되는 부분
- Time Stamp : 방문자가 접속한 시간 (GMT - 그리니치 표준시 포함)
- HTTP Request
- 사용자 접속한 방식 (POST, GET)
- 접속파일
- HTTP 버전
- Status : 사용자가 요청한 내용을 처리한 결과
- 200 : Success
- 3xx : Redirection
- 4xx : Client Error
- 5xx : Server Error
- Transfer Volume : 요청한 파일의 용량, 없는 경우 0 또는 - 로 표시
access
- 루트킷 확인
- Rootkit : 정상적 프로그램을 변조시킴 (주로 바이너리 파일)
- ls, ps, netstat, login, top, dir, du, ifconfig, find, tcpd …
ls
명령어를 변조시켜 공격자가 만든 파일이 보이지 않도록 함
- 시스템 프로그램 파일크기, 생성시간, 변경시간 확인
/bin
, /usr/bin
디렉토리 에서 ls -alct | more
명령을 통해 다른 프로그램이 기본적으로 설치된 시간과 다른 것이 있는지 확인 -> 파일사이즈 비교
ls
-a
: all - 숨겨진 파일, 디렉토리를 보고자 할때
-l
: long - 자세한 내용을 출력. 권한, 파일 수, 소유자, 그룹, 파일크기, 수정일자 등
-c
: ctime - 변경시간
- MAC : mtime (수정), atime (접근), ctime (변경)
- 기본값 mtime 으로 출력
-u
: atime
-t
: 시간순 정렬
-S
: 파일 사이즈 순 정렬
- 무결성 검사 (리눅스) :
rpm -Va
s.5.....GT /bin/df
- s : 프로그램 사이즈 변경
- 5 : md5 checksum 값 변경
- T : vkdlfdml mtime 값 변경
- G : group 변경
- u : user 변경
- c : 설정파일 변경
- 무결성 검사 (솔라리스) :
fingerprint
- 검사하고자 하는 파일의 checksum 값을 만들어 비교
strace
: System 콜 추적
- 예) ps 명령어 추적 :
strace -e trace=open ps|more
- 결과가
open("/usr/lib/locale/ro_RO/u~/procre)
이라고 나왔을 경우 ps 가 해당 파일을 참조
- 공격자가 숨기고 싶은 파일을 해당 파일에 등록
- 해킹 관련 파일 조사
- 피해 시스템에 공격자가 어떤 작업을 했는지 알아보기 위한 절차
- 타 시스템 스캔
- 공격 프로그램 설치
- IRC 서버 설치
- 로그 삭제
- 스니퍼 프로그램 설치
- 새롭게 생긴 파일 찾기
find
명령어를 이용해 최근 수정된 파일, 생성된 파일 찾기
- 변조를 감추기 위해 시간을 수정하는 경우 inode 변경시간 체크
- 수정일 7일 이내인 파일 찾기
find [폴더] -type f -mtime 일수 -print
- 최근 5일동안 수정되거나 새롭게 생성된 파일을 찾아서
/var/aaa/test.out
파일에 저장
find / -ctime -5 -print > /var/aaa/test.out
- setuid, setgid
find / -user root -perm -4000 -print > suidlist
find / -user root -perm -2000 -print > sgidlist
/usr, /var, /dev, /tmp
디렉토리 안 파일 검사
/dev
폴더 안 디바이스파일 이외의 일반파일이 있는 경우
. , ..
으로 시작하는 디렉토리
ls
명령어를 옵션 없이 사용시 비노출 (숨겨진 디렉토리)
댓글남기기