Skip to content

2009.11.30 23:41

lsof 활용 가이드

조회 수 8313 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
Tip 1) 어떤 특정한 파일을 사용하고 있는 프로세스들에 대한 정보를 알고 싶을 때,

$ lsof (expected file name with path)

을 실행하면 된다.

$ lsof /etc/passwd

를 실행하면, /etc/passwd를 억세스하고 있는 프로세스들을 점검할 수 있으며, 이 파일을 가지고 장난치는 프로세스들도 발견할 수 있다.

Tip 2) 어떤 파일 시스템 내에, 그렇게 큰 크기의 파일들을 찾을 수 없는데도 불구하고, Available Space가 0을 향해서 치닫고 있을 수도 있다. 아마도, unlink된 파일에 대고 계속해서 써 대고 있을 가능성이 크다. lsof는

$ lsof (expected directory - root of mounted partition)

의 형식으로 해당 디렉토리 내, 혹은 partition 내에 있는 모든 파일들에 대해 억세스하고 있는 프로세스들을 열거해 줄 수 있다. 역시 장난 치는 프로세스를 발견할 수 있을 것이다.

Tip 3) 긴급히 어떤 파일 시스템을 unmount해야 할 때, 여러분은 해당 파일 시스템에 있는 파일들을 사용하는 프로세스들 덕분에 unmount를 하지 못하고 마냥 기다리기만 했던 일을 겪어 봤을 것이다. lsof는 파일 시스템 내에 있는 파일들에 대해서 억세스하고 있는 프로세스들을 다 찾아줄 수 있다.

$ lsof (expected file system name)

이것을 이용해서 즉시 unmount를 하는 스크립트도 간단히 만들 수 있을 것이다.

Tip 4) lsof는 모든 네트워크 Socket들을 찾아낼 수 있다.

$ lsof -i

를 실행하면, 현재 사용되고 있는 모든 Socket들을 볼 수 있을 것이다.

Tip 5) Tip 4)를 잘 이용하면, 어떤 네트워크 Connection에 대해서 그 목적지 나 어디서 부터 맺어진 연결인지를 쉽게 알아낼 수 있다. 만약, 여러분의 서버 에서 돌아가고 있는 프로세스들 중에서, security.kaist.ac.kr로 연결을 하고 있는 프로세스를 잡아낼 수 있으며, 구체적으로 어떤 서비스(혹은 포트)에 연 결하고 있는가도 지정하여 알아낼 수 있다.

$ lsof -i@security.kaist.ac.kr $ lsof -iTCP(|UDP)@security.kaist.ac.kr:smtp

물론 여러개의 -i옵션을 이용해서 다양한 호스트로의 연결을 잡아낼 수 있다.

Tip 6) Tip 5)를 응용해서 netstat과 물려서 이용하는 예도 있다.


$ netstat -t
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 security.kaist.ac:1019 fool.bbaga.co.kr:login ESTABLISHED

자, 누군가가 fool.bbaga.co.kr의 login 서비스로 커넥트하고 있는 것이 발견 됐다. 이 프로세스를 Tip 5)를 이용해서 찾아보도록 하자.

$ lsof -iTCP@fool.bbaga.co.kr:login
COMMAND PID USER FD TYPE DEVICE SIZE/OFF INODE NAME
rlogin 25023 godslord 3u inet 0x10144168 0t184 TCP security.kaist.ac.kr:1019-)fool.bbaga.co.kr:login
...

Tip 7) lsof로, 어떤 특정한 프로그램의 프로세스들이 억세스하고 있는 모든 파일들을 볼 수 있다. -c 옵션으로 이것을 간단하게 해결할 수 있다.
$ lsof -c httpd

httpd 데몬을 통해서 억세스 되고 있는 모든 파일들을 열람할 수 있다.

Tip 8) lsof를 이용하여, rcp나 ftp를 이용한 파일 전송 과정을 모니터링 할 수도 있다. 먼저 대상이 되는 프로세스를 ps 등을 이용해서 찾아낸다. 그런 다음,

$ lsof -p (PID)

를 하면 당연히 해당 프로세스가 열고 있는 파일들을 열람할 수 있게 된다. 조금 더 자세히하고 싶다면, ftp는 일반적으로 9,10이나 10,11번을 각각 Socket과 Local Data File에 할당하고, rcp는 3,4번을 할당한다. 이를 이용 하면,

$ lsof -p (PID) -ad9,10 -r

이런 식으로 되며, 어떤 뜻인지는 위의 옵션 설명을 보고 해석해 보기 바란다.

Tip 9) lsof로는 어떤 유저가 열고 있는 모든 파일들을 열거해 볼 수도 있다.

$ lsof -u(loginname) 혹은 $ lsof -u(UID)

-u 옵션에는 인자를 ","로 구분하여 여러 인자를 한 꺼번에 넘길 수 있다.

$ lsof -ugodslord,sakai,astroby

즉, godslord, sakai, astroby의 유저들이 열고 있는 모든 파일들을 열거한다. -u 옵션을 사용하면서, 특정한 유저에 대한 정보는 보고 싶지 않을 때는, Login Name이나 UID의 앞에 "^"를 붙여 주면 된다.

$ lsof -u ^root 혹은 $ lsof -u ^0

이렇게 되면, root에 대해서는 체크를 하지 않는다.

Tip 10) lsof를 이용해서, 로그인 추적도 가능하다. 다음의 예제는 Solaris 2.x 에서의 경우이다.


$ lsof -i@security.kaist.ac.kr
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
in.rlogin 8112 root 0u inet 0x60d7c7e8 0t2 TCP fool.bbaga.co.kr:login-)security.kaist.ac.kr:1018 (ESTABLISHED)
in.rlogin 8112 root 1u inet 0x60d7c7e8 0t2 TCP fool.bbaga.co.kr:login-)security.kaist.ac.kr:1018 (ESTABLISHED)
in.rlogin 8112 root 2u inet 0x60d7c7e8 0t2 TCP fool.bbaga.co.kr:login-)security.kaist.ac.kr:1018 (ESTABLISHED)

security.kaist.ac.kr에서부터 fool.bbaga.co.kr로 로긴한 프로세스가 있다. 이 프로세스의 ID는 8112번이다.

$ lsof -p 8112
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
....
in.rlogin 8112 root 4u VCHR 23,0 0t0 136785 /devices/pseudo/clone@0:ptmx-)logindmux-)ptm
in.rlogin 8112 root 5u VCHR 4,0 0t0 136939 /devices/pseudo/clone@0:logindmux-)logindmux
in.rlogin 8112 root 6u VCHR 4,1 0t0 136939 /devices/pseudo/clone@0:logindmux-)logindmux
...

물론 다른 내용도 많겠지만 위의 내용, 특히 맨 첫 라인에 주목해 보자. 이 프로세스는 DEVICE 항목에서 보듯이, 23, 0의 Device를 사용하고 있으며, 이는 곧, /dev/pts/0을 의미한다.

$ lsof /dev/pts/0
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
tcsh 8114 godslord 15u VCHR 24,0 0t35381 136786 /dev/pts/../../devices/pseudo/pts@0:0
...

즉, 이 유저는 /dev/ptr/0에서 tcsh 프로세스를 가지고 로긴한 사실을 알 수 있다.
Platform마다 다르지만 비슷한 방법으로 로긴을 추적해 낼 수 있다.

List of Articles
번호 제목 글쓴이 날짜 조회 수
68 리눅스 보안 - 권한설정에 주의해야할 명령어들은 ? l2zeo 2010.03.31 27743
67 안티 루트킷 사용 예 l2zeo 2010.03.28 11573
66 리눅스 - iptables NAT rule ADMINPLAY 2010.03.24 9669
65 Cisco/Tip/라우터,스위치에서 패킷 캡쳐하기 file l2zeo 2010.03.23 16121
64 해킹이 의심될 때 사용되는 명령어들 l2zeo 2010.03.08 9864
63 iptables 리눅스? NETFILTER관련 1 l2zeo 2010.03.08 10122
62 LINUX 해킹당했을 때 대처요령 l2zeo 2010.03.08 8731
61 파일 퍼미션 설정을 통한 로컬 공격 방지 l2zeo 2010.03.08 8168
60 SSH 공격막아내기 방법 l2zeo 2010.03.08 8391
59 Tcpdump 용어 정리 ADMINPLAY 2010.01.30 8505
58 홈페이지 보안 강화 도구(CASTLE) 보급 안내 1 file ADMINPLAY 2010.01.22 8925
57 Kernel 2.4.23 버전 이하에 나온 ptrace 버그에 관한 사항 ADMINPLAY 2009.12.13 8797
» lsof 활용 가이드 ADMINPLAY 2009.11.30 8313
55 실전 테스트!! 스니퍼 공격 ADMINPLAY 2009.11.30 9770
54 해외에서 접근하는 IP 차단하기 ADMINPLAY 2009.11.30 9257
53 iptables 옵션 및 상태 추적 테이블 및 rule ADMINPLAY 2009.11.30 8851
52 ossec 로그 분석 툴 설치 ADMINPLAY 2009.10.20 11527
51 SSH(Security SHell) 보안쉘 ADMINPLAY 2009.10.20 8404
50 홈페이지 변조 대처법 (FTP 계정을 이용한 아이프레임 코... ADMINPLAY 2009.10.15 9043
49 iframe 이용한 악성코드 삽입, 홈페이지 변조 사고 대비 ... ADMINPLAY 2009.10.15 10806
Board Pagination Prev 1 2 3 4 5 Next
/ 5

Copyright ADMINPLAY corp. All rights reserved.

abcXYZ, 세종대왕,1234

abcXYZ, 세종대왕,1234