본문 바로가기
운영체제 (LNX,WIN)

lsof 이용한 시스템 조사 및 분석

by 날으는물고기 2009. 5. 31.

lsof 이용한 시스템 조사 및 분석

1. lsof 란?
2. lsof 활용법
3. 해킹 추적
4. 결론

____

 

1. lsof 란?


# whatis lsof
lsof (8) - list open files ( 열려진 파일들을 보는 명령어 )

일반적으로 시스템에서 동작하고 있는 모든 프로세스에 의해서 열리어진 파일들에
관한 정보를 보여주는 시스템 관리 명령어


2. lsof 활용법

lsof sample usage
-----------------

 

파일
# lsof /etc/passwd

특정 파일을 억세스하고 있는 프로세스 확인
# lsof /tmp
list all files open in /tmp
# lsof L
list the link counts of open files
# lsof L1
select only files that have a link count less than the upper bound
# lsof -a L1 /home
-a (AND 옵션) /home 디렉토리 밑에서 검색

 

인터넷 소켓

# lsof -i
lists all open Internet socket files
# lsof -iTCP@bae.nuri.net
# lsof -iTCP@bae.nuri.net:ftp-data
# lsof -iTCP:32771-32776
# lsof -i@192.168.0.1

특정 호스트(또는 ip)에 대한 접속 확인

# lsof -i @test.sun.com:80

특정 포트로 접속한 리스트 확인

# lsof -u $UID

특정 유저가 사용하는 프로세스 확인

# lsof -u ^root,yskim,admin

특정사용자를 제외한 정보를 출력하고자 할때는 "^" 심볼을 사용하여 사용자명을 기술하면 되고, 여러명을 동시에 지정하려면 ","를  이용하여 사용자명을 나열하면 된다.


프로세스
# lsof -p $PID
지정한 프로세스가 오픈한 파일 리스트 확인
# lsof -c $CMD
지정한 실행 프로그램이 엑세스하고 있는 파일 리스트 확인

 

2.1. lsof 파일명

지정한 파일을 엑세스 하고 있는 프로세스의 정보를 보여준다.

 

# lsof /usr/sbin/proftpd
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
proftpd 647 nobody txt REG 8,2 433516 209221 /usr/sbin/proftpd


fuser 또한 파일을 사용중인 프로세스를 찾는 명령이다.

# fuser -v -n tcp 21

solaris 에도 fuser가 있고 역시 파일을 사용중인 프로세스를 찾는 명령인데
linux처럼 포트를 조사하는 옵션이 없는 것 같다.

 

2.2. lsof /tmp

지정한 디렉토리를 엑세스 하고 있는 프로세스의 정보를 보여준다.

 

# lsof /tmp
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
libhttpd. 27187 root 3u REG 7,0 0 13 /tmp/ZCUD5mDv1l (deleted)
libhttpd. 27318 nobody 3u REG 7,0 0 13 /tmp/ZCUD5mDv1l (deleted)
libhttpd. 27319 nobody 3u REG 7,0 0 13 /tmp/ZCUD5mDv1l (deleted)
libhttpd. 27320 nobody 3u REG 7,0 0 13 /tmp/ZCUD5mDv1l (deleted)
libhttpd. 27321 nobody 3u REG 7,0 0 13 /tmp/ZCUD5mDv1l (deleted)

 

2.3. lsof -i

모든 네트워크 연결되어 있는 프로세스와 파일을 정보를 보여준다.

 

# lsof -i
sshd 586 root 3u IPv4 1877 TCP *:ssh (LISTEN)
xinetd 600 root 5u IPv4 1943 TCP *:pop3 (LISTEN)
sendmail 619 root 4u IPv4 1962 TCP *:smtp (LISTEN)
proftpd 647 nobody 0u IPv4 315947 TCP *:ftp (LISTEN)
mysqld 708 mysql 3u IPv4 2652 TCP *:mysql (LISTEN)


ex)lsof -iTCP ; lsof -iUDP
tcp 나 혹은 UDP를 걸러서 볼때 사용한다.

 

2.4. lsof -c 데몬명

지정한 데몬과 연결되어 있는 프로세스와 파일을 정보를 보여준다.

 

# lsof -c proftpd
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
proftpd 647 nobody cwd DIR 8,3 4096 2 /
proftpd 647 nobody rtd DIR 8,3 4096 2 /
proftpd 647 nobody txt REG 8,2 433516 209221 /usr/sbin/proftpd
proftpd 647 nobody mem REG 8,3 106424 15973 /lib/ld-2.3.2.so
proftpd 647 nobody mem REG 8,3 23404 15994 /lib/libcrypt-2.3.2.so
proftpd 647 nobody mem REG 8,3 30488 17917 /lib/libpam.so.0.75
proftpd 647 nobody mem REG 8,3 1571340 95813 /lib/tls/libc-2.3.2.so
proftpd 647 nobody mem REG 8,3 14888 15996 /lib/libdl-2.3.2.so
proftpd 647 nobody mem REG 8,3 8612 17914 /lib/liblaus.so.1.0.0
proftpd 647 nobody mem REG 8,3 51908 16016 /lib/libnss_files-2.3.2.so
proftpd 647 nobody 0u IPv4 315947 TCP *:ftp (LISTEN)
proftpd 647 nobody 4r REG 8,3 3509 82811 /etc/passwd
proftpd 647 nobody 5r REG 8,3 1241 83170 /etc/group


2.5. lsof -p 프로세스ID

지정한 프로세스와 관련된 프로세스와 파일의 정보를 보여준다.

 

# lsof -p 1
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
init 1 root cwd DIR 8,3 4096 2 /
init 1 root rtd DIR 8,3 4096 2 /
init 1 root txt REG 8,3 27036 16204 /sbin/init
init 1 root mem REG 8,3 1571340 95813 /lib/tls/libc-2.3.2.so
init 1 root mem REG 8,3 106424 15973 /lib/ld-2.3.2.so
init 1 root 10u FIFO 8,3 71415 /dev/initctl

 

2.6 lsof -n : 레퍼런스 카운트점검


3. 해킹 추적

 

3.1. 시나리오

 

#lsof -i -> 기본 포트연것을 확인한다.
#lsof -p -> 프로세스를 분석한다.
#lsof /home/홈페이지 디렉토리 -> 특정디렉토리에 있는 프로세스 검사
#lsof /tmp -> 임시파일 관련 프로세스 분석
#lsof /dev -> 정규 해킹 디렉토리 분석


각종 정보를 수집하고 정리 및 대응을 한다.

 

4. 결론

보안 관련된 일을 하는 사람은 반드시 마스터해야한다. 

728x90

댓글