Linux command phân tích log

1. Các câu lệnh linux hay dùng

Command lineGiải thích
grepTìm các dòng chứa chuỗi được chỉ định
awkPhân tách cột và tìm kiếm hàng có điều kiện
sortSắp xếp dòng
uniqLoại bỏ các hàng trùng lặp và đếm
wcĐếm số ký tự, số dòng
sedThay thế điều kiện quy định

Ví dụ ta có đoạn logs sau cần xử lý :

# access_log

203.0.113.1 - - [03/May/2020:12:00:00 +0900] "GET /index.html HTTP/1.1" 200 1000 "http://example.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"
203.0.113.1 - - [03/May/2020:12:10:00 +0900] "GET /index.html HTTP/1.1" 200 1000 "http://example.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"
203.0.113.2 - - [03/May/2020:12:20:00 +0900] "GET /index.html HTTP/1.1" 200 1000 "http://example.com/" "Mozilla/5.0 (Windows NT 6.3; Win64; x64)"
203.0.113.2 - - [03/May/2020:12:30:00 +0900] "GET /index.html HTTP/1.1" 200 1000 "http://example.com/" "Mozilla/5.0 (Windows NT 6.3; Win64; x64)"
203.0.113.2 - - [03/May/2020:12:40:00 +0900] "GET /index.html HTTP/1.1" 200 1000 "http://example.com/" "Mozilla/5.0 (Windows NT 6.3; Win64; x64)"
198.51.100.3 - - [03/May/2020:12:50:00 +0900] "GET /index.cgi?page=<Script>alert('Evil')</Script> HTTP/1.1" 200 3000 "-" "Evil User Agent"
198.51.100.3 - - [03/May/2020:13:00:00 +0900] "GET /../../../../../etc/shadow HTTP/1.1" 200 3000 "-" "Evil User Agent"

Trong đó:

  • 203.0.113.0/24 là địa chỉ ip đúng từ người dùng
  • 198.51.100.0/24 là địa chỉ ip từ nguồn đáng ngờ

Sau đó ta sẽ dùng grep để tìm kiếm thông tin

・Điều tra cuộc tấn công vào thư mục

grep -n "\.\." access_log
7:198.51.100.3 - - [03/May/2020:13:00:00 +0900] "GET /../../../../../etc/shadow HTTP/1.1" 200 3000 "-" "Evil User Agent"

・Điều tra chèn script đáng ngờ

grep -i "<script>" --color access_log
198.51.100.3 - - [03/May/2020:12:50:00 +0900] "GET /index.cgi?page=<Script>alert('Evil')</Script> HTTP/1.1" 200 3000 "-" "Evil User Agent"

・Điều tra chèn thẻ tag html đáng ngờ

grep -E "<[^>]+>[^<]+<[^>]+>" -o access_log
<Script>alert('Evil')</Script>

Giải thích về option trong grep:

optionGiải thích
-nHiển thị số dòng của dòng match
-iKhông phân biệt chữ hoa và chữ thường
—colorHiển thị màu đối với từ đã match
-oHiển thị phần đã match
-ESử dụng biểu thức regex

・Loại bỏ log từ nguồn chuẩn

grep -v "203.0.113." access_log
198.51.100.3 - - [03/May/2020:12:50:00 +0900] "GET /index.cgi?page=<Script>alert('Evil')</Script> HTTP/1.1" 200 3000 "-" "Evil User Agent"
198.51.100.3 - - [03/May/2020:13:00:00 +0900] "GET /../../../../../etc/shadow HTTP/1.1" 200 3000 "-" "Evil User Agent"

Giải thích về option trong grep:

optionGiải thích
-vKhông hiển thị dòng match

・Trích xuất ra địa chỉ ip client

awk '{print $1}' access_log 
203.0.113.1
203.0.113.1
203.0.113.2
203.0.113.2
203.0.113.2
198.51.100.3
198.51.100.3

・Trích xuất ra User Agent của client

awk -F[\"] '{print $6}' access_log 
Mozilla/5.0 (Windows NT 10.0; Win64; x64)
Mozilla/5.0 (Windows NT 10.0; Win64; x64)
Mozilla/5.0 (Windows NT 6.3; Win64; x64)
Mozilla/5.0 (Windows NT 6.3; Win64; x64)
Mozilla/5.0 (Windows NT 6.3; Win64; x64)
Evil User Agent
Evil User Agent

Giải thích về option trong awk:

optionGiải thích
{print $1}Hiển thị ra cột đầu tiên được phân tách bằng dấu phân cách
-FChỉ định dấu phân cách (mặc định là khoảng trắng)

・Hiển thị ra số lượng của mỗi địa chỉ ip client

awk '{print $1}' access_log | sort | uniq -c | sort -rn
      3 203.0.113.2
      2 203.0.113.1
      2 198.51.100.3

Giải thích:

command line, optionGiải thích
uniq -cHiển thị số trùng lặp (yêu cầu sắp xếp để so sánh trước và sau)
sort -nSắp xếp các trường số theo giá trị số học
sort -rSắp xếp theo thứ tự giảm dần (mặc định là thứ tự tăng dần)
wc -lHiển thị ra số dòng

・Ẩn danh địa chỉ IP nguồn để truy cập bình thường

sed "s/203\.0\.113\.[0-9]\{1\,3\}/xxx.xxx.xxx.xxx/g" access_log
xxx.xxx.xxx.xxx - - [03/May/2020:12:00:00 +0900] "GET /index.html HTTP/1.1" 200 1000 "http://example.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"
xxx.xxx.xxx.xxx - - [03/May/2020:12:10:00 +0900] "GET /index.html HTTP/1.1" 200 1000 "http://example.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"
xxx.xxx.xxx.xxx - - [03/May/2020:12:20:00 +0900] "GET /index.html HTTP/1.1" 200 1000 "http://example.com/" "Mozilla/5.0 (Windows NT 6.3; Win64; x64)"
xxx.xxx.xxx.xxx - - [03/May/2020:12:30:00 +0900] "GET /index.html HTTP/1.1" 200 1000 "http://example.com/" "Mozilla/5.0 (Windows NT 6.3; Win64; x64)"
xxx.xxx.xxx.xxx - - [03/May/2020:12:40:00 +0900] "GET /index.html HTTP/1.1" 200 1000 "http://example.com/" "Mozilla/5.0 (Windows NT 6.3; Win64; x64)"
198.51.100.3 - - [03/May/2020:12:50:00 +0900] "GET /index.cgi?page=<Script>alert('Evil')</Script> HTTP/1.1" 200 3000 "-" "Evil User Agent"
198.51.100.3 - - [03/May/2020:13:00:00 +0900] "GET /../../../../../etc/shadow HTTP/1.1" 200 3000 "-" "Evil User Agent"

Giải thích:

optionGiải thích
s/string A/string B/gThay chuỗi A bằng chuỗi B. Thay thế tất cả bằng cách thêm g.

Join Telegram SysAdmins VN

Trả lời

Email của bạn sẽ không được hiển thị công khai.