toán này ngƣời quản trị hệ thống phải dựa trên các nguồn nhật ký hệ thống sẵn có của hệ thống. Do vậy việc định dạng các nhật ký hệ thống mới là điều hết sức cần thiết và quan trọng đối với một thệ thống GSANM.
3.2Giải pháp trích xuất các trƣờng thông tin quan trọng từ nhật ký hệ thống hệ thống thống
3.2.1 Mô hình chung
Hình 3.1: Mô hình trích xuất các trƣờng thông tin quan trọng từ nhật ký hệ thống Mô hình chung cho quá trình trích xuất các trƣờng thông tin quan trọng gồm có Mô hình chung cho quá trình trích xuất các trƣờng thông tin quan trọng gồm có các bƣớc nhƣ sau:
Thu thập nguồn nhật ký hệ thống: Đây là bƣớc đầu tiên cần thực hiện vì bƣớc này cung cấp nguồn dữ liệu ban đầu. Bƣớc này thực hiện thu thập tất cả nhật ký hệ thống cần phân tích, theo dõi. Có nhiều phƣơng pháp để thực hiện công việc này, tuy nhiên điều này còn phụ thuộc vào từng thiết bị và ứng dụng cụ thể.
Xác định các trƣờng thông tin quan trọng và các chuỗi regex để lọc thông tin: Sau khi đã thu thập đƣợc nhật ký hệ thống, bƣớc tiếp theo là tiến hành phân tích, xác định các trƣờng thông tin quan trọng ban đầu, sau đó tạo các chuỗi lọc các trƣờng thông tin này bằng biểu thức chính quy Regular Expression.
Tạo định dạng nhật ký hệ thống mới và cập nhật vào hệ thống: Sau khi đã có đầy đủ thông tin các trƣờng cần lấy và định dạng các trƣờng này bằng biểu thức chính quy Regex, ngƣời quản trị cần tiến hành đƣa các chuỗi này vào file định dạng mẫu XML đây là định dạng mẫu chung cho các loại nhật ký hệ thống. Sau đó ngƣời quản trị thực hiện loại bỏ các trƣờng không quan trọng hoặc không có dữ liệu và sắp xếp để lọc dữ liệu theo định dạng mẫu này. Cuối cùng ngƣời quản trị thêm định dạng mới này vào hệ thống GSANM.
3.2.2 Các bƣớc thực hiện
Có một số cách để ngƣời quản trị có thể thu thập nhật ký hệ thống nhƣ sau:
Ngƣời quản trị có thể cài các agent lên trên các máy tính, máy chủ cần thu thập nhật ký hệ thống để dịch vụ này gửi nhật ký hệ thống về hệ thống GSANM. Đối với trƣờng hợp này, ngƣời quản trị có thể thực hiện trên cả hai môi trƣờng Linux và Windows. Ngoài ra, môi trƣờng Linux còn có cơ chế chủ động gửi nhật ký hệ thống về một host bất kỳ, chỉ cần ngƣời quản trị thực hiện khai báo host.
Đối với môi trƣờng Windows ngƣời quản trị có thể cài đặt ứng dụng Adaptive Log Exporter để gửi nhật ký hệ thống về cho hệ thống GSANM. Adative Log Exporter là một ứng dụng độc lập chạy trên môi trƣờng Windows có khả năng thu thập nhật ký hệ thống từ các máy tính hoặc thiết bị chạy trên môi trƣờng Windows và chuyển tiếp các nhật ký hệ thống này về cho Event Collector. [13]
Hình 3.2: Giao diện của Adaptive Log Exporter
Từ bƣớc cài đặt cho đến lúc cấu hình hoàn thành, Adaptive Log Exporter có khả năng gửi nhật ký hệ thống của các ứng dụng hoặc thiết bị chạy trên môi trƣờng Windows với các tùy chọn cho các dạng nhật ký hệ thống nhƣ: Secutiry log, DNS log, … để gửi nhật ký hệ thống về máy chủ đƣợc ngƣời quản trị khai báo. Ứng dụng này có khả năng gửi nhật ký hệ thống từ bất kỳ một file nhật ký hệ thống nào về máy chủ đƣợc khai báo ở phần tab Destination. Đối với môi trƣờng Linux ngƣời quản trị có thể cấu hình đơn giản hơn bằng cách mở file: /etc/syslog.conf và thêm vào dòng lệnh gửi
nhật ký hệ thống về máy chủ thu thập: authpriv. * @<IP máy chủ thu
Dạng thứ hai đó là trƣờng hợp ngƣời quản trị không cài đặt đƣợc các dịch vụ lên các thiết bị hay máy chủ. Đối với trƣờng hợp này hầu hết trên các thiết bị hoặc máy chủ này đều hỗ trợ việc forward log về một máy chủ thu thập nhật ký hệ thống. Vì vậy, để thu thập nhật ký hệ thống ngƣời quản trị chỉ cần cấu hình theo yêu cầu của nhà cung cấp dịch vụ.
VD: Cấu hình gửi nhật ký hệ thống của Checkpoint đƣợc thực hiện theo các bƣớc phía dƣới:
Bƣớc 1: Tại giao diện dòng lệnh của Checkpoint gõ lệnh expert
Bƣớc 2: Nhập mật khẩu đƣợc yêu cầu
Bƣớc 3: Mở file: /etc/rc.d/rc3.d/S99local
Bƣớc 4: Thêm dòng lệnh ―$FWDIR/bin/fw log -ftn | /usr/bin/logger –p‖
<facility>.<priority> > /dev/null 2>&1 & Trong đó:
<facility> là Syslog facility. VD: local3.
<priority> là Syslog priority. VD: info.
VD:
$FWDIR/bin/fw log -ftn | /usr/bin/logger -p local3.info > /dev/null 2>&1 &
Bƣớc 5: Ghi và đóng file lại.
Bƣớc 6: Mở file syslog.conf .
Bƣớc 7: Thêm dòng lệnh: <facility>.<priority> <TAB><TAB>@<host> Trong đó:
<facility> là syslog facility VD: local3 giống với giá trị trong bƣớc4.
<priority> là syslog priority VD: info or notice giống với giá trị
trong bƣớc4.
<TAB> sử dụng phím TAB.
<host> địa chỉ mà log đƣợc gửi về.
Bƣớc 8: Ghi và đóng file.
Bƣớc 9: Tùy thuộc vào hệ thống đang sử dụng mà ngƣời quản trị có thể sử
dụng các lệnh để khởi động lại syslog nhƣ sau:
Linux: service syslog restart
Solaris: /etc/init.d/syslog start
Bƣớc 10: Cuối cùng sử dụng lệnh:
nohup $FWDIR/bin/fw log -ftn | /usr/bin/logger –p <facility>.<priority> > /dev/null 2>&1 &
<facility> là Syslog facility VD: local3 giống với giá trị trong bƣớc
4.
<priority> là Syslog priorityVD info giống với giá trị trong bƣớc4.
Nhƣ vậy qua 10 bƣớc trên log của Checkpoint đã đƣợc cấu hình để gửi về máy chủ đã đƣợc khai báo địa chỉ IP ở bƣớc 7.
Dạng thứ 3 đó là ngƣời quản trị cung cấp Username và Password cho máy chủ thu thập nhật ký hệ thống để hệ thống GSANM tự động đăng nhập vào máy chủ lấy nhật ký hệ thống. Trƣờng hợp này thƣờng đƣợc sử dụng trên môi trƣờng Windows. Các dịch vụ cần có để thực hiện đƣợc việc này đó là:
o Remote procedure Call (RPC)
o Remote procedure Call (RPC) locator
o RPC Endpoint Mapper
o Remote Registry
o Server
o Mở các cổng: 139 TCP, 445 TCP.
3.2.2.2 Trích xuất các trƣờng thông tin quan trọng từ nguồn nhật ký hệ thống ban đầu
Việc tiếp theo cần làm đối với nguồn nhật ký hệ thống đƣợc gửi về hệ thống GSANM đó là trích xuất các trƣờng thông tin quan trọng để hiển thị lên hệ thống GSANM cũng nhƣ để tạo các luật thông qua nội dung các trƣờng này. Để thực hiện đƣợc việc này, cần có một định dạng chung cho các loại nhật ký hệ thống.
Từ nguồn nhật ký hệ thống ban đầu, ngƣời quản trị sẽ sử dụng ngôn ngữ Regular Expression để xác định các trƣờng dữ liệu quan trọng và đƣa giá trị các trƣờng đó vào định dạng mẫu cho từng loại nhật ký hệ thống. Về cơ bản, Regular Expression là một mẫu mô tả một lƣợng văn bản (text) xác định. Regular Expression sử dụng biểu thức và nguyên tắc đã đƣợc định nghĩa nhằm phân tích sự trùng khớp của một tập các chuỗi nào đó [14].
Sau đó, ngƣời quản trị sẽ cập nhật định dạng mới vào hệ thống nhằm phân tích các nhật ký hệ thống mới này. Định dạng mẫu cho từng loại nhật ký hệ thống là một file XML với các nhãn là trƣờng giá trị quan trọng mà ngƣời quản trị cần phải xác định. Định dạng mẫu trong hình 3.3 dƣới đây đƣợc hãng IBM hỗ trợ để bổ sung các nhật ký hệ thống mới chƣa đƣợc định dạng trong hệ thống GSANM.
<?xml version="1.0" encoding="UTF-8"?>
<device-extension xmlns="event_parsing/device_extension">
<!-- Do not remove the "allEventNames" value -->
<pattern id="allEventNames" xmlns=""><![CDATA[(.*)]]></pattern>
<!-- Everything below this line can be modified -->
<pattern id="EventName" xmlns=""><![CDATA[]]></pattern> <pattern id="EventCategory" xmlns=""><![CDATA[]]></pattern>
<pattern id="SourceIp" xmlns=""><![CDATA[]]></pattern> <pattern id="SourcePort" xmlns=""><![CDATA[]]></pattern> <pattern id="SourceIpPreNAT" xmlns=""><![CDATA[]]></pattern> <pattern id="SourceIpPostNAT" xmlns=""><![CDATA[]]></pattern> <pattern id="SourceMAC" xmlns=""><![CDATA[]]></pattern>
<pattern id="SourcePortPreNAT" xmlns=""><![CDATA[]]></pattern> <pattern id="SourcePortPostNAT" xmlns=""><![CDATA[]]></pattern> <pattern id="DestinationIp" xmlns=""><![CDATA[]]></pattern> <pattern id="DestinationPort" xmlns=""><![CDATA[]]></pattern> <pattern id="DestinationIpPreNAT" xmlns=""><![CDATA[]]></pattern> <pattern id="DestinationIpPostNAT" xmlns=""><![CDATA[]]></pattern> <pattern id="DestinationPortPreNAT" xmlns=""><![CDATA[]]></pattern> <pattern id="DestinationPortPostNAT" xmlns=""><![CDATA[]]></pattern> <pattern id="DestinationMAC" xmlns=""><![CDATA[]]></pattern>
<pattern id="DeviceTime" xmlns=""><![CDATA[]]></pattern> <pattern id="Protocol" case-insensitive="true"
xmlns=""><![CDATA[]]></pattern>
<pattern id="UserName" xmlns=""><![CDATA[]]></pattern> <pattern id="HostName" xmlns=""><![CDATA[]]></pattern> <pattern id="GroupName" xmlns=""><![CDATA[]]></pattern> <pattern id="NetBIOSName" xmlns=""><![CDATA[]]></pattern>
<match-group order="1" description="Log Source Extension" xmlns=""> <matcher field="EventName" order="1" pattern-id="EventName" capture-group="1" enable-substitutions="false"/>
<matcher field="EventCategory" order="1" pattern-id="EventCategory" capture- group="1"/>
<matcher field="SourceIp" order="1" pattern-id="SourceIp" capture-group="1" /> <matcher field="SourcePort" order="1" pattern-id="SourcePort" capture-group="1" /> <matcher field="SourceIpPreNAT" order="1" pattern-id="SourceIpPreNAT" capture- group="1" />
<matcher field="SourceIpPostNAT" order="1" pattern-id="SourceIpPostNAT" capture- group="1" />
<matcher field="SourceMAC" order="1" pattern-id="SourceMAC" capture-group="1" /> <matcher field="SourcePortPreNAT" order="1" pattern-id="SourcePortPreNAT" capture- group="1" />
<matcher field="SourcePortPostNAT" order="1" pattern-id="SourcePortPostNAT" capture-group="1" />
<matcher field="DestinationIp" order="1" pattern-id="DestinationIp" capture- group="1" />
<matcher field="DestinationPort" order="1" pattern-id="DestinationPort" capture- group="1" />
<matcher field="DestinationIpPreNAT" order="1" pattern-id="DestinationIpPreNAT" capture-group="1" />
<matcher field="DestinationIpPostNAT" order="1" pattern-id="DestinationIpPostNAT" capture-group="1" />
<matcher field="DestinationPortPreNAT" order="1" pattern- id="DestinationPortPreNAT" capture-group="1" />
<matcher field="DestinationPortPostNAT" order="1" pattern- id="DestinationPortPostNAT" capture-group="1" />
<matcher field="DestinationMAC" order="1" pattern-id="DestinationMAC" capture- group="1" />
<matcher field="DeviceTime" order="1" pattern-id="DeviceTime" capture-group="1" /> <matcher field="Protocol" order="1" pattern-id="Protocol" capture-group="1" /> <matcher field="UserName" order="1" pattern-id="UserName" capture-group="1" /> <matcher field="HostName" order="1" pattern-id="HostName" capture-group="1" /> <matcher field="GroupName" order="1" pattern-id="GroupName" capture-group="1" /> <matcher field="NetBIOSName" order="1" pattern-id="NetBIOSName" capture-group="1"
/>
<event-match-multiple pattern-id="allEventNames" capture-group-index="1" device- event-category="unknown" send-identity="OverrideAndNeverSend" />
</match-group> </device-extension>
Hình 3.3: Định dạng mẫu chung của log
Tùy thuộc vào từng loại nhật ký hệ thống mà nhãn của trƣờng dữ liệu có thể đƣợc xác định và trích xuất. Tuy nhiên, không phải tất các các trƣờng này đều có thể đƣợc trích xuất, có nghĩa là một số nhật ký hệ thống chứa giá trị tƣơng ứng với các nhãn trên, và một số nhật ký hệ thống có thể không chứa các giá trị tƣơng ứng với các nhãn đó. Do vậy, để xác định một loại nhật ký hệ thống mới ngƣời quản trị sẽ thực hiện một số bƣớc cơ bản sau:
Bƣớc 1: Xác định nhãn thông tin quan trọng
Các thiết bị an ninh hoặc ứng dụng trong hệ thống GSANM cung cấp nhiều dạng nhật ký hệ thống khác nhau. VD: Đối với nhật ký hệ thống Firewall có các loại nhật ký hệ thống nhƣ Access, Deny, Drop, … Sau đây là một ví dụ về nguồn nhật ký hệ thống chƣa đƣợc định dạng.
<13>Aug 3 14:32:58 SERVER FTP: Connection closed <SessionID=58616793, Listener=198.147.12.43:21, Client=172.25.254.27:27515><Command=start> <11>Aug 3 14:32:44 SERVER SSH: No User. Possible reasons: Invalid username, invalid license, error while accessing user database <SessionID=29634951, Listener=198.147.12.43:22, Client=172.25.254.27:8077, User=infosec> <14>Aug 3 14:28:17 SERVER FTP: SendResponse: An existing connection was forcibly closed by the remote host <SessionID=19346180, Listener=198.147.12.43:21,
Client=172.25.254.27:19971><Command=QUIT, Error=10054> <13>Aug 3 12:10:00 SERVER SSH: Completed password Authentication. User logged in <Host=usftp.discovery.com, SessionID=41272593, Listener=198.147.12.43:22, Client=50.58.39.77:63163, User=ussidecoder> 4>Aug 3 12:10:01 SERVER SSH: Client closed connection <Host=usftp.discovery.com, SessionID=41272593, Listener=198.147.12.43:22, Client=50.58.39.77:63163, User=ussidecoder> <13>Aug 3 13:01:36 SERVER FTP: <Host=usftp.discovery.com, SessionID=62734836, Listener=198.147.12.43:21, Client=172.30.31.81:11632, User=netcaptioning><Command=STOR, Parameters=144356.040.01.285A.txt><Filename=\\us\shared\usftp\private\n etca ptioning\Offline Files\Hub\144356.040.01.285A.txt, FileSize=51648 bytes, TransferTime=1078 ms>
Khi đọc nhật ký hệ thống trên ngƣời quản trị có thể hiểu đƣợc các một số thông tin quan trọng với các nhãn nhƣ User, Command, File name, …. Sau đây là bảng các nhãn thông tin quan trọng mà ngƣời quản trị thƣờng phải xác định để đƣa vào định dạng mẫu.
Thuộc tính Mô tả
Event Name Đằng sau thông tin bắt đầu phiên nhƣ ―SSH‖, sau thông tin ―Command‖
Source IP Giá trị trong nguồn nhật ký hệ thống tại vị trí nhãn―Client=‖ Source Port Giá trị đứng sau địa chỉ IP nguồn đƣợc phân cách bằng dấu ―:‖ Destination IP Giá trị trong nguồn nhật ký hệ thống tại vị trí nhãn ―Listener=‖
Destination Port
Giá trị đứng sau địa chỉ IP đích đƣợc phân cách bằng dấu ―:‖
Username Giá trị trong ngồn nhật ký hệ thống tại vị trí nhãn ―User=‖ Hostname Giá trị trong nguồn nhật ký hệ thống tại vị trí nhãn ―Host=‖
Bảng 3.1: Nhãn thông tin quan trọng
Các giá trị thông tin trên rất quan trọng và hữu dụng cho hệ thống GSNAM bởi vì đó là các thông tin cơ bản khi ngƣời quản trị cần điều tra hoặc phát hiện các tấn công. Các thông tin trên cho phép ngƣời quản trị xác định nguồn đích và sự kiện xảy ra giữa hai máy chủ, các cổng của máy đích và máy nguồn cũng nhƣ địa chỉ IP của các máy đó, thông tin ngƣời dùng, ....
Bƣớc 2: Trích xuất các trƣờng thông tin quan trọng
Ngƣời quản trị hệ thống sử dụng ngôn ngữ Regular Expression (Regex) để lấy các giá trị của thông tin. Đây là nhiệm vụ chính trong quá trình định dạng một dạng nhật ký hệ thống mới cho hệ thống GSANM. Nhƣ vậy nhìn vào định dạng mẫu có thể nhận ra rằng, nhãn của các trƣờng thông tin quan trọng đã đƣợc xác định, và việc cần làm tiếp theo là xác định các giá trị và đƣa vào từng trƣờng tƣơng ứng với các nhãn. Với sự hỗ trợ của Regex ngƣời quản trị có thể trích xuất các giá trị thông tin quan trọng trong một chuỗi sự kiện an ninh nhằm gán các giá trị này vào các nhãn đã đƣợc cung cấp trong định dạng mẫu.
Cụ thể đối với VD trên, giả sử nhật ký hệ thống FTP chƣa đƣợc định dạng và ngƣời quản trị buộc phải định dạng nhật ký hệ thống với các trƣờng tƣơng ứng. Trƣớc hết ngƣời quản trị cần làm là tìm giá trị của Event name,
nhãn này sẽ có giá trị là ―Connection closed‖ và tên đầy đủ của sự kiện này là ―FTP: Connection closed‖. Theo Regular Expression thực hiện lọc chuỗi này với cú pháp: FTP:\s(.\w+\s\w+) nhƣ hình 3.4. Khi tìm kiếm chuỗi với cú pháp trên ta thấy dòng sự kiện ―FTP: Connection closed‖ hiển thị lên, giá trị này sẽ đƣợc đƣa vào nhãn Event name. Cú pháp ―FTP:\s(.\w+\s\w+)‖ có nghĩa là tìm các giá trị có chứa ―FTP:‖ tiếp theo sau là một khoảng trắng và hai từ khóa cách nhau bởi khoảng trắng.
Hình 3.4: Kết quả thực hiện cú pháp tìm tên sự kiện FTP
Tƣơng tự nhƣ vậy ngƣời quản trị sẽ sử dụng các cú pháp sau cho việc lọc và xác định giá trị của các trƣờng thông tin quan trọng trong nhật ký hệ thống. Cú pháp tìm địa chỉ IP nguồn: ―Client=([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)‖
Hình 3.5: Kết quả thực hiện cú pháp tìm địa chỉ IP nguồn Sau đây là bảng cú pháp lọc tƣơng ứng với các nhãn đƣợc chỉ ra trên Sau đây là bảng cú pháp lọc tƣơng ứng với các nhãn đƣợc chỉ ra trên
Thuộc tính Cú pháp lọc tƣơng ứng (Regular Expression) Event Name FTP:\s(.\w+\s\w+) SSH:\s(.\w+\s\w SFTP:\s(.\w+\s\w+) channel:\s(.\w+\s\w+) COM_API:\s(.\w+\s\w+) <Command=([a-zA-Z]+) Source IP Client=([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)
Source Port Client=[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+:([0-9]+) Destination IP Listener=([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)
Destination Port Listener=[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+:([0-9]+) Username User=([a-zA-Z]+)
Hostname \<Host=([a-zA-Z]+\.[a-zA-]+\.[a-zA-Z]+[\.*a-zA-Z]*) Bảng 3.2: Cú pháp lọc cơ bản trong Regex
Bƣớc 3: Đƣa các trƣờng thông tin quan trọng vào định dạng mẫu cho nguồn