ssoL2 TISTORY

리눅스 로그 분석 본문

sec/forensic

리눅스 로그 분석

ssoL2 2021. 2. 27. 18:52

<account>

  1. history -> (/home/~/.bash_history)
  2. group -> (/etc/group)
  3. last -> (/var/log/wtmp)
  4. lastlog -> (/var/log/lastlog)
  5. passwd -> (/etc/passwd)
  6. shadow -> (/etc/shadow)
  7. w -> (/var/run/utmp)

<network>

  1. netstat_an
  2. lsof
  3. arp (/proc/net/arp)

<osinfo>

  1. df
  2. date
  3. hostname
  4. ifconfig
  5. timezone (/etc/timezone)
  6. localtime (/etc/localtime -> /usr/share/zoneinfo/Asia/Seoul)
  7. uname

<process>

  1. crontab (/etc/crontab)
  2. ipcs 
  3. lsmod (/proc/moduls)
  4. ps
  5. pstree

<weblog>

  1. access.log  (/var/log/httpd-aceess.log or /var/log/apache2/access.log) 

 


 

  1. history -> (/home/~/.bash_history)
  2. group -> (/etc/group)
  3. last -> (/var/log/wtmp)
  4. lastlog -> (/var/log/lastlog)
  5. passwd -> (/etc/passwd)
  6. shadow -> (/etc/shadow)
  7. w -> (/var/run/utmp)

 

 

1. history (/home/~/.bash_history)
  • 입력했던 명령어를 "홈 디렉터리"에 있는 [.bash_history] 파일에 저장한다.
  • [history] 명령어 -> [자신이 사용한 명령어]
  • [-c] 옵션으로 히스토리를 모두 삭제할 수 있고, 파이프와 [grep]으로 필터링할 수 있다.

history 명령어 사용
/home/ssol2/.bash_history

 

2. group (/etc/group)
  • /etc/group그룹등록되어 있는 파일이다.
  • [cat /etc/group] 명령어 -> [Groupname : Group password : Group ID : Group members]
  • 마지막 항목인 <그룹에 속한 사용자 이름(Group members)> 은 생략되는 경우도 많기 때문에 사용자가 없다고 오해하기 쉽다.
  • 중요한 것은 "User"는 반드시 특정 그룹에 소속되어야 한다.

/etc/group

 

 

3. last (/var/log/wtmp)
  • 시스템 재부팅 정보와 "모든 사용자"의 로그인 정보를 출력한다.
  • [last] 명령어 -> [Username Port From 연결한 시간]
  • [-R] 옵션으로 IP주소 정보를 제외한 나머지 정보를 출력하고, [-d] 옵션으로 외부 접속 정보만을 확인한다.
  • /var/log/wtmp 파일을 참조하여 출력되며, 해당 파일이 존재하지 않으면 접속 정보를 기록하지 않기 때문에 직접 파일을 생성해주어야 한다.

last -R (IP주소가 생략되어 출력됨)

  • /var/log/wtmp는 사용자들의 로그인아웃 정보와 시스템 관련 정보를 기록한다.
  • /var/log/wtmp는 바이너리 파일로 저장되기 때문에 cat 명령어와 vi 명령어로 확인할 수 없다.

 

 

4. lastlog (/var/log/lastlog)
  • 전체 계정에 대한 "마지막 접속 정보"만을 출력한다.
  • [lastlog] 명령어 -> [Username Port From Latest]
  • /etc/passwd 에 정의되어 있는 모든 사용자들의 마지막 접속 정보를 확인하고, /var/log/lastlog 파일을 참조하여 마지막 접속 정보를 출력한다.

 

lastlog는 /etc/passwd를 참조하여 /var/log/lastlog를 확인하므로 계정 순서가 동일함.
lastlog와 계정 순서 동일한 /etc/passwd

  • /var/log/lastlog는 바이너리 파일로 저장되기 때문에 cat 명령어와 vi 명령어로 확인할 수 없다.
  • /usr/include/lastlog.h에서 정의된 포맷으로 저장되며 lastlog.h는 /usr/include/utmp.h에 지정된 포맷을 사용한다.

 

 

5. passwd (/etc/passwd)
  • 계정과 관련된 정보가 기록되며, User 계정 뿐만 아니라 root 계정, 데몬 계정 등이 기록된다.
  • [cat /etc/passwd] 명령어 -> [Username : password : UID : GID : GECOS : HomeDirectory : LoginShell]
  • 보안상의 이유로 <password> 항목은 'x'로 두고, /etc/shadow 파일에 암호화 저장된다.
  • <CECOS>는 사용자에 대한 여러가지 정보를 입력하는 곳으로 필수항목이 아니다.
  • <LoginShell>은 로그인 시 Default로 사용되는 Shell이다.

cat /etc/passwd

 

 

6. shadow (/etc/shadow)
  • 사용자의 계정과 패스워드 정보가 기록된다.
  • 패스워드(password)는 "암호화" 되어 기록된다.
  • [cat /etc/shadow] 명령어 -> [Username : password : 파일 최종수정날짜 : password 변경 최소일 : password 변경 최대일 : password 만료 경고 기간 : 계정 만료 기간 : 예약 필드]

sudo cat /etc/shadow (/shadow는 root 권한 필수)
root 권한 실행가능

 

 

7. w (/var/run/utmp)
  • "서버"에 접속한 사용자의 접속 정보 및 작업 정보 내용을 확인한다.
  • /var/run/utmp은 "현재 로그인한 상태 정보"를 담고 있는 로그파일로, 바이너리로 저장되어 있다.
  • [w] 명령어로 /var/run/utmp를 확인할 수 있다.
  • [w] 명령어 

  1. 서버의 현재 시각 정보
  2. 서버의 부팅한 이후의 시스템 작동 시간
  3. 서버 접속자의 총 수
  4. 접속사별 서버 평균 부하율 정보
  5. 접속사별 서버 접속 계정 이름
  6. 접속사별 접속 TTY 명
  7. 접속사별 접속한 IP
  8. 접속사별 로그인 시각
  9. 접속사별 CPU 사용 정보(IDLE, JCPU, PCPU)
  10. 접속사별 현재 사용 명령어

* IDLE : 최종 명령 수행 후의 대기 시간을 출력한다.

* JCPU : w 명령어를 통해 볼 수 있는 결과 중 TTY 필드에서 사용하는 장치에 사용하는 모든 프로세스의 CPU 사용시간을 출력한다. 이때 지난 background에서 실행되는 시간은 제외하며, 현재 background에 실행되는 시간만 포함한다.

* PCPU : w 명령어를 통해 볼 수 있는 결과 중 what 필드에 나타나는 프로세스의 CPU 총 사용시간을 출력한다.

 

 


 

  1. netstat_an
  2. lsof
  3. arp (/proc/net/arp)

 

 

1. netstat
  • 네트워크 접속라우팅 테이블네트워크 인터페이스의 통계 정보를 보여주는 도구
  • [-a] 옵션은 모든 네트워크 상태를 보여주며, [-n] 옵션은 ip와 port를 출력한다.
  • [netstat -an] 명령어를 자주 사용한다.

  1. [Proto] - 프로토콜 종류
  2. [Recv-Q] - 받는 큐 (받는 패킷의 socket buffer size)
  3. [Send-Q] - 보내는 큐 (보내는 패킷의 socket buffer size)
  4. [Local Address] - 내부주소 (ip:포트번호)
  5. [Foreign Address] - 외부주소
  6. [State] - 상태정보(1. LISTEN, 2. ESTABLISHED, 3. TIME_WAIT, 4. CLOSED)

 

 

2. lsof 
  • "LiSt Open File"의 약자로 시스템에서 열린 파일 목록을 알려주고 사용하는 프로세스, 디바이스 정보, 파일의 종류 등 상세한 정보를 출력한다.
  • [lsof] 명령어

  1. [COMMAND] - 실행한 명령어
  2. [PID] - process ID
  3. [USER] - USER
  4. [FD] - File Descriptor로 파일의 종류이다. (1. cwd - current working directory, 2. rtd : root directory 3. mem : memory-mapped file, 4. txt - program text (code and data))
  5. [TYPE] - 파일 종류이다. (1. DIR - DIRectory, 2. CHR - CHRacter spcical file 4. REG - Regular file 5. unix - 유닉스 도메인 소켓)
  6. [DEVICE] - 장치 번호
  7. [SIZE/OFF] - 파일의 크기나 오프셋
  8. [NODE] - 노드 번호
  9. [NAME] - 파일명
  • [lsof 특정 파일] 명령어로 특정 파일을 사용하고 있는 프로세스의 자세한 정보를 볼 수 있다.
  • [lsof -i] 명령어는 가장 많이 쓰는 명령어로, TCP/UDP 소켓을 사용하는 프로세스를 확인할 수 있다.

 

 

3. arp (/proc/net/arp)
  • ARP 테이블로 IP주소에 대한 MAC주소를 확인할 수 있다.
  • [arp] 명령어 -> [Address HWtype HWaddress Flags Mask Iface]
  • Subnet의 ARP 정보는 연결 효율을 높이기 위해 /proc/net/arp 에 저장된다.

arp 명령어

 

 


 

  1. df
  2. date
  3. hostname
  4. ifconfig
  5. timezone (/etc/timezone)
  6. localtime (/etc/localtime -> /usr/share/zoneinfo/Asia/Seoul)
  7. uname

 

 

1. df
  • 리눅스 시스템 전체의 (마운트 된) 디스크 사용량을 확인할 수 있다.
  • [df] 명령어 -> [Filesystem 1K-blocks Used Available Use% Mounted on]
  • [-k] 옵션으로 킬로바이트 단위로 현재 남은 용량을 확인할 수 있다.

df -k 명령어

 

 

2. date
  • 현재 서버 날짜와 시간이 출력된다.
  • [data] 명령어 -> [요일 월 일 시간 년도]

date 명령어

 

 

3. hostname
  • 시스템의 이름을 확인하거나 바꿀 때 사용하는 명령어이다.
  • [hostname] 명렁어 -> [host명]

hostname 명령어
hostname 명령어

 

 

4. ifconfig
  • "InterFace CONFIGuration"의 약자로 리눅스의 네트워크 관리를 위한 인터페이스 구성 유틸리티이다.
  • 옵션을 사용하지 않으면 활성화된 인터페이스의 세부 사항을 표시한다.
  • [-a] 옵션으로 비활성화된 네트워크 인터페이스까지 볼 수 있다.

ifconfig 명령어

  1. [eth0] - 네트워크 인터페이스
  2. [Link encap] - 전송할 때 캡슐화되는 방식 (Ethernet : 이더넷 프레임으로 캡슐화)
  3. [HWaddr] - 하드웨어 주소인 MAC Address
  4. [inet addr] - 할당된 IPv4 Address
  5. [Bcast] - 할당된 Broadcast Address
  6. [Mask] - 할당된 Subnet Mask
  7. [inet6 addr] - 할당된 IPv6 Address
  8. [Scope] - 주소가 유효한 범위 (Link : 로컬 서브넷 내에서 유효, Global : 서브넷 밖의 인터넷에서도 통신 가능)
  9. [UP] - 현재 활성화된 상태이다.
  10. [BROADCAST] - 브로드캐스트를 지원한다.
  11. [RUNNING] - 현재 이터페이스가 실행 중인 상태이ㅏㄷ.
  12. [MULTIAST] - 멀티캐스트를 지원한다.
  13. [MTU] - "Maximum Transfer Unit"으로 최대 전송 단위로, 한 번에 보낼 수 있는 최대 네트워크 데이터 크기이다.
  14. [Metric] - 우선순위를 나타내며 낮을수록 우선순위가 높음.(0부터 시작)
  15. [RX packets] - 부팅 후 현재까지 "받은" 패킷 수
  16. [TX packets] - 부팅후 현재까지 "보낸" 패킷 수
  17. [collisions] - 네트워킹에서 패킷 충돌이 일어난 패킷 수
  18. [txqueuelen] - Transmission queue의 크기
  19. [RX bytes, TX bytes] - RX bytes는 받은 데이터의 총 크기를, TX bytes는 보낸 데이터의 총 크기를 의미한다.
  20. [Interrupt] - 패킷이 수신될 때 발생하는 인터럽트 번호
  21. [Base address] - 인터럽트에 대한 핸들러 주소

 

 

5. timezone (/etc/timezone)
  • 서버 시간대를 확인할 수 있다.
  • [cat /etc/timezone] 명령어로 서버의 시간대를 확인할 수 있다.

cat /etc/timezone 명령어

 

 

6. localtime (/etc/localtime -> /usr/share/zoneinfo/Asia/Seoul)
  • 서버를 어느 나라의 시간대로 운영할 것이지 설정한다. 
  • 시스템 시간, 로그 저장시간, 크론 도는 시간에 모두 적용된다.
  • /etc/localtime 은 "어셈블리"로 되어있어 분석하기는 어렵다.

xxd /etc/localtime 명령어

 

  • /etc/localtime 은 /usr/share/zoneinfo/Asia/Seoul 에 링크되어 있다.

/etc/localtime -> /usr/share/zoneinfo/Asiz/Seoul

 

  • [ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime] 명령어로 상해시간으로 변경도 가능하다.

 

 

7. uname
  • 시스템의 정보를 확인한다.
  • 시스템의 이름, 사용중인 운영체제와 버전, 호스트명, 하드웨어 정보 등을 확인할 수 있다.
  • [-a] 옵션으로 시스템의 모든 정보를 출력한다.

uname -a 명령어

  1. [Linux] - 운영체제 종류
  2. [ubuntu] - hostname
  3. [2.6.32-38-generic-pae] - 운영체제의 버전
  4. [i686] - 하드웨어 플랫폼
  5. [GNU/Linux] - 현재 운영체제

 


 

  1. crontab
  2. ipcs 
  3. lsmod (/proc/moduls)
  4. ps
  5. pstree

 

 

가장 많이 정보가 나오는 항목일 수 있음.

 

 

 

1. crontab (/etc/crontab)
  • 관리자 root가 직접 지정한 작업들을 설정하며, 임의의 사용자 권한으로 실행할 수 있다.
  • 시스템 관련 작업들을 등록해 사용한다.
  • [cat /etc/crontab] 명령어로 확인 가능하다.

cat /etc/crontab 명령어

  • [run-parts] 명령어는 특정 디렉토리내에 스크립트나 프로그램을 실행하는 명령어
  • 특정 m h dom mon dow에 user 권한으로 command 명령하는 작업을 반복한다.

 

 

2. ipcs
  • 시스템에서 사용중인 콜 프로세스의 ipc와 관련된 정보를 출력한다.
  • ipc는 "Inter-Process Communication"의 약자로 프로세스간 통신을 뜻한다.
  • [ipcs -u] 명령어로 간추린 정보를 같이 출력한다.

ipcs -u 명령어

 

 

3. lsmod (/proc/moduls)
  • 리눅스 커널에 있는 모듈 module의 정보를 보여준다.
  • 리눅스 커널 모듈은 시스템을 리부팅할 필요 없이 활성화될 수 있고 커널에 삽입될 수 있다.
  • /proc/moduls 파일의 내용을 포맷한다.
  • [lsmod] 명령어를 사용한다.

lsmod 명령어

  1. [Module] - 모듈 파일의 이름
  2. [Size] - 상주모듈에 의해서 사용되는 메모리의 양 (byte 단위)
  3. [Used by] - 사용되고 있는 모듈의 인스턴스를 표현하는 숫자이다. (0이라면 현재 사용X, 텍스트는 모듈의 정보)

 

 

4. ps
  • 현재 실행중인 "프로세스" 목록과 상태를 보여준다.
  • [-a] 옵션으로 세션 리더(일반적으로 로그인 셸)을 제외하고 데몬 프로세스처럼 터미널에 종속되지 않은 모든 프로세스를 출력한다.
  • [-e] 옵션으로 커널 프로세스를 제외한 모든 프로세스를 출력한다.
  • [-f] 옵션으로 Full format으로 출력하며, 유닉스 스타일로 UID, PID, PPID 등이 함께 표시한다.
  • [ps -ef] 명령어 [ps -eaf] 명령어를 자주 사용한다.

ps -eaf 명령어

  1. [UID] - SYSTEM V계열의 프로세스 소유자의 이름
  2. [PID] - 프로세스 ID
  3. [PPID] - 부모 프로세스 ID
  4. [C] - 짧은 기간 동안의 CPU 사용률 (C: Sys V, CP: BSD)
  5. [STIME] - 프로세스가 시작된 시간 또는 날짜
  6. [TTY] - 프로세스와 연결된 터미널
  7. [TIME] - 총 CPU 사용 시간
  8. [CMD] - 프로세스의 실행 명령행

 

 

5. pstree
  • 프로세스의 상관관계(부모-자식)를 트리 형태로 출력한다.
  • [pstree] 명령어를 사용하고, [-a] 옵션으로 지정한 인수까지 출력된다. (모양도 더 이쁨)

pstree -a 명령어

 


 

  1. access.log

 

1. access.log (/var/log/httpd-aceess.log or /var/log/apache2/access.log) 
  • 외부에서의 접근이 발생하면 apache 웹서버에서 설정한 경로에 access log가 파일로 생성되거나 있는 파일에 추가된다.
  • 해당 파일에는 한 중당 하나의 엑세스 정보가 남게 된다.
  • /var/log/httpd-aceess.log or  /var/log/apache2/access.log

cat /var/log/httpd-acess.log 명령어

  1. 원격 호스트 IP 주소 (요청자)
  2. 요청 시간
  3. 요청 내용
  4. HTTP 상태 코드
  5. HTTP 헤더를 제외한 전송 바이트 수
  6. 리퍼러(referrer)

 

 

 

 

 

 

 

 

 

< 참조 >

history -> jhnyang.tistory.com/306

group -> www.leafcats.com/132

last, lastlog -> m.blog.naver.com/PostView.nhn?blogId=dudwo567890&logNo=130153163350&proxyReferer=https:%2F%2Fwww.google.com%2F

passwd, shadow -> seoulforest.tistory.com/entry/%EB%A6%AC%EB%88%85%EC%8A%A4-study-1

netstat -> startingpitcher.tistory.com/12

lsof -> www.lesstif.com/system-admin/lsof-20776078.html

arp -> pchero21.com/?p=640

/etc/crontab 도움될 사이트 -> ehfgk78.github.io/2018/01/19/about_Linux/

lsmod -> blankspace-dev.tistory.com/293

ifconfig -> m.blog.naver.com/PostView.nhn?blogId=sunchan683&logNo=221551197371&proxyReferer=https:%2F%2Fwww.google.com%2F

localtime -> antimidal.tistory.com/15

uname -> yoonwould.tistory.com/124

withserver.tistory.com/entry/%EC%BB%A4%EB%A7%A8%EB%93%9C%EB%9D%BC%EC%9D%B8%EC%9D%98-%EA%B0%84%EB%8B%A8%ED%95%9C-%EC%95%84%ED%8C%8C%EC%B9%98Apache-%EB%A1%9C%EA%B7%B8%EB%B6%84%EC%84%9D

w -> hippogrammer.tistory.com/96

'sec > forensic' 카테고리의 다른 글

내가 찾은 악성코드  (0) 2021.03.07
volatility 메모리 분석  (0) 2021.03.03
jpg 파일 구조 속 썸네일  (0) 2021.02.21
웨이브(.wav) 파일 분석  (0) 2021.02.16
Audacity 다운로드 및 사용법  (0) 2021.02.16
Comments