# Linux Forensics

Đối với chủ đề này tôi sẽ dựa trên bài thử thách ở LetsDefend nhá

## 1. MOUNT FILE .IMG

Đầu tiên chúng ta phải có file để thực hành có thể là một `file.img` hoặc `file.iso`:

Để đi điều tra chúng ta sẽ phải mount (quá trình gắn kết một hệ thống tập tin hoặc thiết bị lưu trữ) file img đó nhé.

<figure><img src="/files/q7yQTUsVnVIiHAy9A0Ol" alt=""><figcaption></figcaption></figure>

Đầu tiên ta sẽ kiểm tra file `.img` này để mount:

<figure><img src="/files/KkGgsHMfFNy3yCa61ezI" alt=""><figcaption></figcaption></figure>

Đầy là img chứa nhiều phân vùng bên trong bên ta sẽ cần gắn vào phân vùng cụ thể. Nên ta sẽ sử dụng tool `fdisk`:

```bash
sudo fdisk -l /home/kali/Desktop/hackerman.img
```

<figure><img src="/files/9PZc3aFRErl19kutU0du" alt=""><figcaption></figcaption></figure>

Lệnh này sẽ hiển thị danh sách các phân vùng ở trong `.img`.&#x20;

Như ở bài của chúng ta thì ta sẽ nhận được 3 phân vùng:

* **Partition 1**: BIOS boot (1 MB)
* **Partition 2**: EFI System (513 MB)
* **Partition 3**: Linux filesystem (19.5 GB)

Để mount vào phân cùng hệ thống tập tin Linux (partition 3), thì ta cần tính toán `offset` chính xác cho phần vùng này.

Công thức để tính `offset`:

```
offset = start_sector * sector_size
```

Như kết quả nhận được của `fdisk` thì ta có được `start_sector` for partition 3 là `1054720` và `sector_size` is `512` bytes. Do đó `offset` có thể nhận kết quả như sau:

```bash
offset=$((1054720 * 512))   # This equals 540016640 bytes
```

Vậy `offset` ta đã có thì ta sẽ mount: (lưu ý cần tạo thư trước ở trong `/mnt`)

```bash
sudo mkdir /mnt/img_mount
```

Sau đó -------->

```bash
sudo mount -o loop,offset=540016640 /home/kali/Desktop/hackerman.img /mnt/img_mount
```

Vậy đã thành công::::

<figure><img src="/files/DcELEO7WIIUX1SDPKGU2" alt=""><figcaption></figcaption></figure>

## 2. Checksum file

Có thể sử dụng các lệnh như: `md5sum`, `sha256sum`, `hash`,...

## 3. Check Command history

Đối với điều này ta có thể sử dụng các file ẩn như `.bash_history`:

<figure><img src="/files/xpVjkag1mtNdFXy3WmBg" alt=""><figcaption></figcaption></figure>

Ví dụ để kiểm tra xem hệ thống tôi đang phân tích xem sử dụng lệnh nào để cài đặt google chrome.

Tôi xem qua thì thấy có file package của google chrome ở thư mục Download nên tôi thấy được tên -> nên tôi sẽ lọc theo tên xem câu lệnh sử dụng là gì:

<figure><img src="/files/2EhKtKQEQPvYjBc3Vp55" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/a0KxAc5FargEYrgrKmg3" alt=""><figcaption></figcaption></figure>

## 4. Check when app installed????

Trước khi đi kiểm tra thời gian mà application đã cài đặt thì ta sẽ đi kiểm tra hệ thống quản lý gói là gì??

Bước 1 chúng ta sẽ đi kiểm tra một số thông tin về hệ điều hành bằng câu lệnh:

```bash
cat /etc/os-release
```

<figure><img src="/files/JwIH74WEs4afdkguEIsO" alt=""><figcaption></figcaption></figure>

từ những thông tin này chúng ta có thể biết được hệ điều hành này sử dụng hệ thống quản lý gói là `apt`. Hoặc cũng có thể kiểm tra thêm một số thư mục xem có tồn tại không là biết ngay ấy mà:

<figure><img src="/files/rS7cNCzaejP16qYZEvRS" alt=""><figcaption></figcaption></figure>

Một số thông tin về hệ thống quản lý gói dựa trên hệ điều hành:

* **APT/DPKG**: Dùng cho Debian, Ubuntu (Kiểm tra `apt`, `dpkg`).
* **YUM/DNF/RPM**: Dùng cho Red Hat, CentOS, Fedora (Kiểm tra `yum`, `dnf`, `rpm`).
* **Pacman**: Dùng cho Arch Linux (Kiểm tra `pacman`).
* **Zypper**: Dùng cho openSUSE (Kiểm tra `zypper`).

Quay trở lại về kiểm tra thời gian cài đặt. Ví dụ kiểm tra công cụ `gimp` có đã được cài đặt hay không ta sẽ chạy như sau:

<figure><img src="/files/uC3bRqjy5vhC6Zq5c0SS" alt=""><figcaption></figcaption></figure>

Như vậy là ta thấy là gimp đã được cài dặt bằng câu lệnh `apt install gimp`. Giờ ta sẽ kiểm tra xem thời gian khi nào:

<figure><img src="/files/ykY9rEXaQkEw1Aar36rD" alt=""><figcaption></figcaption></figure>

## 5. UUID

Đối với UUID of the main root volume thì nó thư mục gốc `/`:

Ta có thể kiểm tra các UUID phụ trách các phân vùng trong file `fstab`

<figure><img src="/files/hapTSfK2F6svVRqjRdzD" alt=""><figcaption></figcaption></figure>

Hoặc kiểm tra trong `/var/log` trong file `syslog` bằng lệnh `grep -i uuid`: với tùy chọn `-i` giúp kết quả không phân biệt chữ cái hoa và thường.

<figure><img src="/files/W7Vt5s3SehuHFASstpv0" alt=""><figcaption></figcaption></figure>

## 6. Tính số lần sử dụng câu lệnh đặc quyền

Sử dụng câu lệnh:

```bash
grep -E "sudo:.*COMMAND=|pkexec.*COMMAND=" auth.log
```

Câu lệnh này sẽ tìm và hiển thị tất cả các dòng trong tệp `auth.log` mà chứa thông tin liên quan đến các lệnh đã được thực thi thông qua `sudo` hoặc `pkexec` (là một công cụ hữu ích cho phép người dùng thực hiện các lệnh và ứng dụng với quyền quản trị trên hệ thống Linux, đặc biệt là trong môi trường đồ họa). Cụ thể, nó sẽ tìm kiếm các dòng có định dạng như sau:

* Dòng chứa `sudo:` và có `COMMAND=` (chứa thông tin về lệnh đã được thực hiện với `sudo`).
* Dòng chứa `pkexec` và có `COMMAND=` (chứa thông tin về lệnh đã được thực hiện với `pkexec`).
* tùy chọn `-E` cho phép sử dụng biểu thức chính quy mở rộng (Extended Regular Expression)
* `.*` Ký tự đại diện cho bất kỳ ký tự nào trước phần sau của mẫu
* **`|`**: Đây là ký tự OR trong biểu thức chính quy, cho phép tìm kiếm hai mẫu khác nhau trong cùng một lệnh.

<figure><img src="/files/7k6Dj8Qy5l2Zpxgr7yeV" alt=""><figcaption></figcaption></figure>

## 7. Forensic browser

Đối với bài này thì chúng ta sẽ xem xét Google chrome: `/home/hackerman/.config/google-chrome/Default/History`

<figure><img src="/files/3jsEfdpKkxHBmdWXSlGW" alt=""><figcaption></figcaption></figure>

Đối với các file này đều là file SQLite3 nên tôi sẽ sử dụng công cụ `sqlite3` để đọc nội dung của file này:

<figure><img src="/files/Bc1FToyoQZVr8HKkBUII" alt=""><figcaption></figcaption></figure>

Một số câu lệnh để sử dụng:

* `.tables` -- Liệt kê các bảng
* `.schema users` -- Xem cấu trúc bảng users
* `SELECT * FROM users;` -- Xem tất cả dữ liệu trong bảng users
* `.quit` - thoát khỏi `sqlite3`

## 8. Sử dụng tool find

### 8.1. Tìm tập tin theo tên

```bash
find / -name "filename"
```

* **`/`** tìm kiếm từ thư mục gốc
* **`-name "filename"`**: Tìm tệp tin có tên chính xác là "filename".

### 8.2. Tìm tập tin theo kiểu (type)

* Tìm tất cả tập tin

```bash
find /path/to/search -type f
```

* Tìm tất cả thư mục

```bash
find /path/to/search -type d
```

### 8.3. Tìm tập tin dưa trên thời gian

* Tìm các tệp đã sửa đổi: `-mtime`
* Tìm các tệp đã truy cập: `-atime`

### 8.4. Tìm tập tin dựa trên kích thước

* Tìm tệp có kích thước trên 100MB: `-size +100M`
* Tìm tệp có kích thước nhỏ hơn 1KB: `-size -1K`

### 8.5. Tìm tập tin dựa trên quyền (permissions)

* Tìm các tệp tin có quyền SUID: `-perm /4000`
* Tìm các tệp tin có quyền thực thi: `-perm /a=x`
* Tìm các tập tin có quyền toàn cục: `-perm -o=w`

### 8.6. Tìm tập tin theo người sở hữu (owner)

* Tìm tất cả tập tin thuộc về người dùng `root`: `-user root`
* Tìm tất cả tập tin thuộc về nhóm `admin`: `-group admin`

### 8.7. Tìm tập tin theo mẫu tên

* Tìm tất cả các tập tin có duôi `.sh`: `-name "*.sh"`
* Tìm tất cả các tập tin chứa từ khóa "hack" trong tên: `-name "*hack*"`

### 8.8. Tìm các tập tin ẩn

```bash
find / -type f -name ".*"
```

## 9. `grep` and `ls`

* Liệt kê nội dung của thư mục với hiển thị danh sách chi tiết được sắp xếp theo thời gian tạo/sửa đổi:

```bash
ls -lart
```

* Tìm các từ hoặc chuỗi cụ thể trong nội dung tệp:

```bash
grep -R "code"
```

```bash
grep -i "uuid"
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://viettaliii.gitbook.io/home/soc-and-dfir/dfir/linux-forensics.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
