디지털 포렌식 - Linux Forensic
Loading content...
↔ 비활성 시스템 포렌식 : 수집된 디스크 이미지에서 증거를 수집하여 분석하는 것
| 명령어 | 설명 | 예시 |
| ls | 디렉토리 내 파일/폴더 목록 보기 | ls -al |
| cd | 디렉토리 이동 | cd /home/user |
| pwd | 현재 작업 디렉토리 출력 | pwd |
| mkdir | 새 디렉토리 생성 | mkdir new_folder |
| rm | 파일/디렉토리 삭제 | rm file.txtrm -r folder/ |
| cp | 파일/디렉토리 복사 | cp file1.txt file2.txtcp -r dir1/ dir2/ |
| mv | 파일/디렉토리 이동 또는 이름 변경 | mv oldname.txt newname.txt |
| touch | 새 파일 생성 | touch file.txt |
| cat | 파일 내용 출력 | cat file.txt |
| less | 파일을 페이지 단위로 보기 | less file.txt |
| echo | 문자열 출력 또는 변수 확인 | echo "Hello" |
| grep | 문자열 검색 | grep "text" file.txt |
| find | 파일/디렉토리 검색 | find . -name "*.txt" |
| man | 명령어의 매뉴얼 보기 | man ls |
| chmod | 권한 변경 | chmod +x script.sh |
| chown | 소유자 변경 | chown user:group file.txt |
| df | 디스크 공간 사용량 확인 | df -h |
| du | 디렉토리/파일 용량 확인 | du -sh * |
| top | 실시간 프로세스 상태 보기 | top |
| ps | 현재 실행 중인 프로세스 확인 | ps aux |
| kill | 프로세스 종료 | kill 1234 (PID 기준) |
| tar | 파일 압축/해제 | tar -cvf file.tar folder/tar -xvf file.tar |
| wget | 파일 다운로드 | wget http://example.com/file.txt |
| curl | URL 요청 및 데이터 송수신 | curl https://example.com |
| sudo | 관리자 권한으로 명령 실행 | sudo apt update |
| apt | 패키지 관리 (Debian/Ubuntu) | sudo apt install git |
| yum | 패키지 관리 (RHEL/CentOS) | sudo yum install git |
| history | 명령어 히스토리 보기 | history |
| clear | 터미널 화면 지우기 | clear |
| exit | 셸 종료 | exit |
1echo "Redirection Test" > ./test.txt
2echo "Redirection Add" >> ./test.txt
1# 시스템의 네트워크 연결 상태를 파일로 저장
2netstat -antp > netstat_result.txt
3
4# 시스템에서 실행 중인 프로세스를 파일로 저장
5ps -ef > process_result.txt1cat test.txt | grep Redirection
포트 포워딩이란?
포트 포워딩이란, 외부에서 특정 포트로 들어온 요청을 내부 IP의 특정 장비/포트로 전달하는 설정
<집에 있는 PC에 웹 서버를 띄웠다고 가정>
1$ lsb_release -a
2No LSB modules are available.
3Distributor ID: Ubuntu
4Description: Ubuntu 22.04.4 LTS
5Release: 22.04
6Codename: jammy1$ sudo fdisk -l
2# 일부 생략
3Disk /dev/sda: 20 GiB, 21474836480 bytes, 41943040 sectors
4Disk model: VMware Virtual S
5Units: sectors of 1 * 512 = 512 bytes
6Sector size (logical/physical): 512 bytes / 512 bytes
7I/O size (minimum/optimal): 512 bytes / 512 bytes
8Disklabel type: gpt
9Disk identifier: E4E85C38-9651-40C8-834C-65C30CD5EF56
10
11Device Start End Sectors Size Type
12/dev/sda1 2048 4095 2048 1M BIOS boot
13/dev/sda2 4096 1054719 1050624 513M EFI System
14/dev/sda3 1054720 41940991 40886272 19.5G Linux filesystem
15
16
17Disk /dev/sdb: 14.75 GiB, 15833497600 bytes, 30924800 sectors
18Disk model: Flash Disk
19Units: sectors of 1 * 512 = 512 bytes
20Sector size (logical/physical): 512 bytes / 512 bytes
21I/O size (minimum/optimal): 512 bytes / 512 bytes
22Disklabel type: dos
23Disk identifier: 0xf53bc2a7
24
25Device Boot Start End Sectors Size Id Type
26/dev/sdb1 2048 30922751 30920704 14.7G 7 HPFS/NTFS/exFAT1$ cat /etc/passwd
2root:x:0:0:root:/root:/bin/bash
3# 중간 생략
4hunjison:x:1000:1000:hunjison,,,:/home/hunjison:/bin/bash
5sshd:x:129:65534::/run/sshd:/usr/sbin/nologin1$ sudo cat /etc/shadow
2[sudo] password for hunjison:
3root:!:19823:0:99999:7:::
4daemon:*:19773:0:99999:7:::
5bin:*:19773:0:99999:7:::
6# 중간 생략
7hunjison:$y$j9T$7x[생략]tK.$BJ[생략]T/:19823:0:99999:7:::
8sshd:*:19823:0:99999:7:::!, $y$j9T$7x : password 필드, 해시화된 패스워드
1$ ip address
21: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
3 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
4 inet 127.0.0.1/8 scope host lo
5 valid_lft forever preferred_lft forever
6 inet6 ::1/128 scope host
7 valid_lft forever preferred_lft forever
82: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
9 link/ether 00:0c:29:ac:72:c5 brd ff:ff:ff:ff:ff:ff
10 altname enp2s1
11 inet 192.168.0.221/24 brd 192.168.0.255 scope global dynamic noprefixroute ens33
12 valid_lft 464sec preferred_lft 464sec
13 inet6 fe80::17d7:2e6:6e1a:f4a0/64 scope link noprefixroute
14 valid_lft forever preferred_lft forever네트워크 인터페이스란?
네트워크 인터페이스란 컴퓨터가 네트워크와 통신할 수 있도록 해주는 물리적 또는 논리적 장치
| 구분 | 설명 | 예시 |
| 물리적(Physical) | 실제 하드웨어 장치 | LAN 카드, Wi-Fi 카드, Ethernet 포트 등 |
| 논리적(Logical) | 소프트웨어로 만든 가상 인터페이스 | lo(loopback), tun0(VPN), docker0(도커 네트워크) 등 |
| 역할 | 설명 |
| IP 주소 할당 | 인터페이스마다 고유한 IP 주소를 가짐 |
| 데이터 송수신 | 네트워크를 통해 데이터를 주고받음 |
| MAC 주소 사용 | 네트워크 상에서의 장치 식별자 역할 |
| 라우팅 연결 | 서로 다른 네트워크 간 통신을 가능하게 함 |
1$ ip route
2default via 192.168.0.1 dev ens33 proto dhcp metric 100
3169.254.0.0/16 dev ens33 scope link metric 1000
4192.168.0.0/24 dev ens33 proto kernel scope link src 192.168.0.221 metric 100 1 $ ip neigh
2192.168.0.1 dev ens33 lladdr 00:1d:ec:2f:ec:47 STALE| 폴더 이름 | 설명 |
| / | 최상위 디렉토리 |
| /root | root 계정의 홈 디렉토리 |
| /bin | 시스템 실행 기본 명령어들이 모여 있는 폴더 |
| /etc | 시스템 환경 설정, 서비스 구성 설정, 사용자/그룹 목록 등 시스템 전반에 대한 설정 파일들이 모여 있는 폴더 |
| /boot | 리눅스 커널이 저장되는 폴더 |
| /mnt | 외부 장치가 마운트되는 폴더 |
| /usr | 프로그램이 설치되는 폴더 |
| /lib | 프로그램에서 사용하는 라이브러리가 저장되는 폴더 |
| /home | 사용자 계정의 홈 디렉토리가 존재하는 폴더 |
| /dev | 시스템의 디바이스 목록과 정보가 저장되는 폴더 |
| /proc | 시스템의 프로세스 정보를 확인할 수 있는 폴더 |
| /var | 시스템에서 사용되는 가변 데이터 파일이 저장되는 폴더 |
| /tmp | 임시 파일을 저장하기 위한 폴더 |
1$ cat /etc/rsyslog.d/50-default.conf
2# Default rules for rsyslog.
3#
4# For more information see rsyslog.conf(5) and /etc/rsyslog.conf
5
6#
7# First some standard log files. Log by facility.
8#
9auth,authpriv.* /var/log/auth.log
10*.*;auth,authpriv.none -/var/log/syslog
11#cron.* /var/log/cron.log
12#daemon.* -/var/log/daemon.log
13kern.* -/var/log/kern.log
14#lpr.* -/var/log/lpr.log
15mail.* -/var/log/mail.log
16#user.* -/var/log/user.log
17
18#
19# Logging for the mail system. Split it up so that
20# it is easy to write scripts to parse these files.
21#
22#mail.info -/var/log/mail.info
23#mail.warn -/var/log/mail.warn
24mail.err /var/log/mail.err
25
26###### 하단 생략 ######| 시스템 로그 경로 | 설명 |
| /var/run/utmp | 현재 시스템에 로그인하고 있는 사용자의 정보 |
| /var/log/btmp | 사용자가 시스템에 로그인 실패한 정보 |
| /var/log/wtmp | 사용자가 시스템에 로그인한 기록 및 시스템 재부팅 기록 |
| /var/log/lastlog | 사용자가 시스템에 마지막으로 로그인 성공한 기록 |
| /var/log/messages | 시스템 전반에 대한 로그를 기록 |
| /var/log/auth.log /var/log/secure *Linux 배포판 차이 | 원격 로그인 및 권한 상승에 대한 성공 및 실패를 기록 |
| /var/log/dmesg | 시스템 부팅 과정에서 생성되는 커널 메시지 로그를 기록 |
| /var/log/cron.log | cron 작업에 대한 로그 *cron: Linux에서 주기적 반복 작업을 처리하는 스케줄러 프로그램 |
| /var/log/boot.log | 운영체제 부팅 과정에서 생성되는 로그를 기록 |
| /var/log/daemon.log | 실행 중인 데몬의 정보가 기록 |
| /var/log/user.log | 시스템 내 모든 사용자에 대한 로그가 기록 |
| 웹 로그 | 설명 |
| access.log | 서버가 처리하는 모든 요청을 기록 |
| error.log | 서버가 요청을 처리하는 도중 발생한 오류를 기록 |
1# apt update
2sudo apt update
3
4# install apache2
5sudo apt install -y apache2
6
7# install mariadb
8sudo apt install -y mariadb-server
9sudo mysql_secure_installation
10
11# install php
12sudo apt install -y php libapache2-mod-php php-mysql
13
14# 설치가 잘 되었는지 결과 확인
15# Apache2는 웹 브라우저 이용해서 http://localhost 접속
16sudo mariadb # mariadb 결과 확인
17php -v # php 설치 확인1create database dreamhack; # 데이터베이스 생성
2use dreamhack; # 생성한 데이터베이스 선택
3
4create table member( # member 테이블 생성
5 id varchar(10) not null,
6 pass varchar(100) not null,
7 name varchar(10) not null,
8 primary key(id)
9);
10
11insert into member values('guest', 'guest', 'guest'); # 테이블에 값 추가
12insert into member values('root', 'veryverylongpassworditis', 'root');
13
14select * from member; # member 테이블 값 조회
15

1192.168.0.179 - - [13/Apr/2024:19:49:52 +0900] "POST /check_login.php HTTP/1.1" 200 521 "http://192.168.0.221/login.php" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36"
2192.168.0.179 - - [13/Apr/2024:19:49:54 +0900] "GET /login.php HTTP/1.1" 200 572 "http://192.168.0.221/check_login.php" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36"IP 주소 192.168.0.179에서 [13/Apr/2024:19:49:52 +0900] 시간에 POST 메서드를 이용해 /check_login.php 페이지에 대해 HTTP/1.1 프로토콜로 응답을 보냄
해당 응답은 상태 코드 200(요청 성공)을 반환했으며, 512 바이트 응답 메시지가 전송
클라이언트의 Referer는 "<http://192.168.0.221/login.php>"이었고, User Agent는 "Mozilla/5.0 (Windows NT ...
1[Sat Apr 13 20:11:47.811356 2024] [php:error] [pid 1009] [client 192.168.0.179:51667] PHP Fatal error: Uncaught mysqli_sql_exception: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'guest'' at line 1 in /var/www/html/check_login.php:21\nStack trace:\n#0 /var/www/html/check_login.php(21): mysqli->query()\n#1 {main}\n thrown in /var/www/html/check_login.php on line 21, referer: http://192.168.0.221/login.php[Sat Apr 13 20:11:47.811356 2024]에 [php:error] 수준의 에러가 발생하였으며, 에러가 발생한 프로세스 ID는 [pid 1009]
클라이언트의 IP 주소는 [client 192.168.0.179:51667]이며, 발생한 에러의 내용은 PHP Fatal error: ...
SQL Injection이란?
SQL Injection은 사용자가 입력한 값에 악의적인 SQL 구문을 삽입하여 데이터베이스를 조작하거나 탈취하는 공격 기법
1SELECT * FROM users WHERE username = '$input' AND password = '$input2';1입력값: ' OR '1'='1
21SELECT * FROM users WHERE username = '' OR '1'='1' AND password = '';페이로드(Payload)란?
페이로드란 공격 과정에서 실제로 전송되는 데이터를 뜻함

1sqlmap -u "http://우분투서버IP/check_login.php" --data "id=guest&pw=guest"패킷이란 ? 컴퓨터 네트워크에서 데이터를 전송할 때
작게 나눈 조각 단위의 데이터 블록
| 계층 | 포함 정보 | 예시 |
| 응용 계층 | 메시지, 요청/응답 내용 | HTTP 요청, DNS 질의 등 |
| 전송 계층 | 포트 번호, 오류 체크 | TCP/UDP 헤더 |
| 네트워크 계층 | IP 주소, 경로 정보 | IP 헤더 |
| 데이터 링크 계층 | MAC 주소, 프레임 정보 | Ethernet 헤더 |
| 물리 계층 | 전기 신호, 비트 | 케이블을 통해 전송됨 |
| 필드 | 설명 |
| After | 이 Unit보다 먼저 실행되어야 할 Unit들 |
| ExecStartPre | 서비스를 실행하기 전에 실행되는 명령어 |
| ExecStart | 서비스를 실행하는 명령어 |
| RuntimeDirectory | 서비스가 실행되는 디렉토리 |

