L-Flow›Agents›Linux fields

ฟิลด์ของ Linux

log จาก Linux agent เป็นข้อความ syslog ซึ่งไม่มีโครงสร้างตายตัว L-Flow อ่านข้อความของโปรแกรมที่รู้จัก (sshd, sudo, auditd ฯลฯ) แล้วแยกออกเป็นฟิลด์ ECS ก่อนจัดเก็บ ข้อความที่ไม่รู้จักจะถูกเก็บไว้ใน message ทั้งบรรทัด

ตัวอย่าง

syslog หนึ่งบรรทัดจาก sshd:

<38>Sep 24 10:15:32 3f9a1c7e2b8d4e6fa1b2c3d4e5f60718 sshd[2211]: Failed password for invalid user admin from 203.0.113.50 port 51122 ssh2

หลังแปลงแล้ว จะเห็นใน Explore เป็น:

vendor          linux
devid           linux-3f9a1c7e2b8d4e6fa1b2c3d4e5f60718
type            auth
process.name    sshd
event.action    login_failed
user.name       admin
source.ip       203.0.113.50
severity        high
message         Failed password for invalid user admin from 203.0.113.50 port 51122 ssh2

ฟิลด์ที่มีในทุก log

ฟิลด์ ECSมาจากความหมาย
timestampsyslog headerเวลาที่เครื่องบันทึก log ตามรูปแบบ syslog ซึ่งไม่มีปีและ timezone
vendor—ค่าคงที่ linux
devidsyslog hostnameรหัสเครื่องที่ได้ตอนลงทะเบียน agent รูปแบบ linux- ตามด้วย machine ID ของเครื่อง (agent ใส่ค่านี้แทน hostname ใน syslog)
typeชื่อโปรแกรมหมวดของ log ดู ค่าของ type
process.namesyslog tagชื่อโปรแกรมที่เขียน log เช่น sshd, sudo (log ของ auditd ใช้ comm แทน)
severitysyslog severityระดับความรุนแรง ดู severity
event.action—สิ่งที่เกิดขึ้น แยกได้เฉพาะโปรแกรมที่รู้จัก ดูแต่ละหัวข้อด้านล่าง
messageข้อความ syslogข้อความเต็มของ log ไม่ตัด

ค่าของ type

typeโปรแกรมความหมาย
authsshd, sshd-session, sudo, su, login, pam_unix, passwd, useradd, userdel, usermod, unix_chkpwdการเข้าสู่ระบบ การใช้สิทธิ์ root และการจัดการบัญชี
systemkernel, systemd, systemd-logind, systemd-journald, cron, crond, anacron, init, klogd, auditd, audit, audispd, audisp-syslogเหตุการณ์ระบบ, service, cron และ auditd
systeml-flow-container, l-flow-filedrop, l-flow-asset, l-flow-usbเหตุการณ์ที่ agent ของ L-Flow ตรวจเอง
syslogอื่นๆโปรแกรมอื่นทั้งหมด เก็บเฉพาะ message ไม่แยกฟิลด์

severity

เริ่มจาก severity ของ syslog แล้วบางเหตุการณ์จะปรับขึ้นตามความสำคัญ เช่น login ไม่สำเร็จเป็น high ค่าที่ปรับแล้วระบุไว้ในแต่ละหัวข้อด้านล่าง

severitysyslog severity
criticalemerg, alert, crit
higherr
mediumwarning
informationnotice, info, debug และค่าอื่น

การเข้าสู่ระบบและสิทธิ์

sshd

event.actionข้อความที่ตรงฟิลด์ที่ได้
login_successAccepted … for USER from IPuser.name, source.ip
login_failedFailed … for USER from IP, Invalid user USER from IPuser.name, source.ip · severity high
session_opensession opened for user USERuser.name
session_closesession closed for user USERuser.name

บรรทัด Disconnected from user USER IP ให้ user.name และ source.ip แต่ไม่มี event.action

sudo

event.actionข้อความที่ตรงฟิลด์ที่ได้
commandUSER : … USER=TARGET ; COMMAND=CMDuser.name (คนที่สั่ง), user.target.name (สิทธิ์ที่ได้ ปกติคือ root), process.command_line · severity อย่างน้อย medium
auth_failedN incorrect password attempts, authentication failureuser.name หรือ user.target.name · severity high
session_open / session_closesession opened/closed … by USER(uid=…)user.name

su

event.actionข้อความที่ตรงฟิลด์ที่ได้
switch_user(to TARGET) USER on …user.name (คนที่สั่ง), user.target.name (บัญชีปลายทาง) · severity medium
auth_failedauthentication failure; ruser=USER … user=TARGETuser.name, user.target.name · severity high

useradd, userdel, usermod

event.actionโปรแกรมฟิลด์ที่ได้
user_adduseradduser.name = บัญชีที่ถูกสร้าง · severity high
user_deleteuserdeluser.name = บัญชีที่ถูกลบ · severity high
user_modifyusermoduser.name = บัญชีที่ถูกแก้ · severity high

systemd-logind, unix_chkpwd

event.actionข้อความที่ตรงฟิลด์ที่ได้
session_opensystemd-logind: New session N of user USER.user.name
session_closesystemd-logind: logged out, Removed session—
login_failedunix_chkpwd: … for user (USER)user.name · type auth · severity high

ระบบและ service

event.actionมาจากฟิลด์ที่ได้
cron_cmdcron: (USER) CMD (COMMAND)user.name, process.command_line
startedsystemd: Started / Finishedservice.name (เช่น nginx.service)
stoppedsystemd: Stopped / Deactivatedservice.name
failedsystemd: Failed / errorservice.name · severity high

auditd

agent ติดตั้ง audit rule ชุดพื้นฐานให้ทุกเครื่อง แต่ละ rule มี key ที่บอกว่าจับอะไร L-Flow ใช้ key นี้กำหนด event.action และ severity ของบรรทัด type=SYSCALL

keyevent.actionseverityจับอะไร
identityfile_changehighแก้ /etc/passwd, shadow, group, gshadow
privilege-escalationprivilege-escalationhighแก้ /etc/sudoers, sudoers.d หรือเรียก setuid/setgid
ssh-configfile_changemediumแก้ /etc/ssh/sshd_config
ssh-keyfile_changehighแก้ /root/.ssh/authorized_keys
pam-configfile_changehighแก้ /etc/pam.d หรือ /etc/security
dns-configfile_changehighแก้ /etc/hosts, resolv.conf, nsswitch.conf
persistencefile_changehighแก้ crontab, cron.d, cron.daily, cron.weekly, /etc/systemd/system
kernel-modulekernel_module_changehighโหลดหรือถอด kernel module
downloaddownloadmediumรัน wget หรือ curl
netcatnetcathighรัน nc
reconreconhighรัน nmap
firewall-changefirewall-changehighรัน iptables, nft, ufw, firewall-cmd
defense-evasiondefense-evasionhighรัน setenforce, semanage, auditctl
anti-forensicsanti-forensicshighแก้ .bash_history ของ root, wtmp, btmp, lastlog หรือรัน shred
agent-tamperagent-tamperhighแก้ไฟล์ใน /etc/l-flow (ค่าตั้งของ agent)
custom-watchfile_changemediumpath ที่เพิ่มเองในหน้า การเฝ้าดูไฟล์ (File Watches)
procprocess_execinformationทุกโปรแกรมที่ถูกรัน (เฉพาะเครื่องที่เปิด การติดตามโปรเซส)
netconnnet_connectlowทุกการเชื่อมต่อออกของผู้ใช้ (ปิดได้ต่อเครื่องที่ บันทึกการเชื่อมต่อเครือข่าย)

ฟิลด์ที่ได้จากบรรทัด SYSCALL:

ฟิลด์ ECSมาจากความหมาย
process.executableexepath ของโปรแกรม
process.namecommชื่อโปรแกรม
process.pidpidprocess ID
process.parent.pidppidprocess ID ของ process แม่
user.idauidUID ของคนที่ login เข้ามาตั้งแต่แรก ไม่เปลี่ยนแม้ใช้ sudo หรือ su
user.nameAUIDชื่อบัญชีของ auid
event.outcomesuccesssuccess หรือ failure
event.idaudit(…:SERIAL)หมายเลขของ audit event ใช้รวมบรรทัด SYSCALL, EXECVE, PATH และ SOCKADDR ของเหตุการณ์เดียวกัน
file.hash.sha256LFLOW_EXE_SHA256hash ของโปรแกรมที่ถูกรัน agent คำนวณเอง (เฉพาะ key proc, download, netcat, recon, firewall-change, defense-evasion)

auditd เขียนหนึ่งเหตุการณ์เป็นหลายบรรทัด บรรทัดอื่นที่มี event.id เดียวกันให้ข้อมูลเพิ่ม:

event.actionบรรทัดฟิลด์ที่ได้
process_argstype=EXECVEprocess.command_line (argument ทั้งหมดต่อกัน)
file_pathtype=PATHfile.path (ไฟล์ที่ถูกแตะ)
net_sockaddrtype=SOCKADDRdestination.ip, destination.port (เฉพาะ IPv4)
selinux_denied / apparmor_deniedtype=AVC, type=APPARMORprocess.name, process.pid, file.path, rule.name (AppArmor profile) · severity high
Note:ในหน้า Explore ให้ค้นด้วย event.id ของบรรทัด SYSCALL เพื่อเห็นคำสั่งเต็มและไฟล์ที่เกี่ยวข้องของเหตุการณ์นั้น

เหตุการณ์จาก L-Flow agent

ไฟล์ใหม่ใน Downloads และ /tmp

ฟิลด์ ECSความหมาย
event.actionfile_download ถ้า browser บันทึก URL ต้นทางไว้, ไม่เช่นนั้น file_drop
file.pathpath ของไฟล์
file.hash.sha256hash ของไฟล์
file.sizeขนาดไฟล์ หน่วย byte
user.nameเจ้าของไฟล์
url.originalURL ที่ดาวน์โหลดมา
http.request.referrerหน้าเว็บที่กดดาวน์โหลด
severitymedium ถ้าไฟล์รันได้ (executable), ไม่เช่นนั้น information

Docker container

ฟิลด์ ECSความหมาย
event.actioncontainer_ ตามด้วยเหตุการณ์ เช่น container_start, container_die, container_exec_start
container.idcontainer ID
container.nameชื่อ container
container.image.nameimage
container.exit_codeexit code เมื่อ container หยุด
severityhigh เมื่อมีการ exec เข้า container, medium เมื่อหยุดด้วย exit code ไม่ใช่ 0 หรือ oom/kill

USB และ SD card

ฟิลด์ ECSความหมาย
event.actionusb_add หรือ usb_remove
file.pathชื่ออุปกรณ์ เช่น sdb
severitymedium

ข้อมูลเครื่อง

ส่งตอน agent เริ่มทำงานแล้วทุก 6 ชั่วโมง event.action เป็น asset_inventory

ฟิลด์ ECSความหมาย
host.os.fullชื่อและเวอร์ชันของ OS
host.os.kernelเวอร์ชัน kernel
host.architectureสถาปัตยกรรม CPU เช่น x86_64
l_flow.package_countจำนวน package ที่ติดตั้ง -1 แปลว่านับไม่ได้ (ไม่ใช่ Debian/Ubuntu)
l_flow.listening_tcp_portsพอร์ต TCP ที่เปิดรอรับการเชื่อมต่อ

CPU, RAM, ดิสก์

ส่งประมาณนาทีละครั้ง เก็บแยกด้วย vendor:l-flow-agent และ type:health ไม่ใช่เหตุการณ์ความปลอดภัย

ฟิลด์ ECSความหมาย
host.cpu.usageCPU ที่ใช้โดยโปรแกรมผู้ใช้ (%)
host.cpu.system_pctCPU ที่ใช้โดย kernel (%)
host.memory.used_pctหน่วยความจำที่ใช้ (%)
host.memory.total_bytesหน่วยความจำทั้งหมด (byte)
host.memory.available_bytesหน่วยความจำที่ยังใช้ได้ (byte)
host.disk.used_pctดิสก์ที่ใช้ (%)
host.disk.total_bytesขนาดดิสก์ (byte)
host.disk.free_bytesดิสก์ว่าง (byte)
host.network.ingress.bytesbyte ที่รับเข้าสะสมตั้งแต่เปิดเครื่อง
host.network.egress.bytesbyte ที่ส่งออกสะสมตั้งแต่เปิดเครื่อง

log ของ Apache และ Nginx

ถ้าเครื่องมี Apache หรือ Nginx agent จะส่ง access log และ error log มาด้วย เก็บด้วย vendor เป็น apache หรือ nginx ใช้ devid เดียวกับ log ระบบของเครื่องนั้น

access log (type: webaccess)

ฟิลด์ ECSความหมาย
source.ipIP ของผู้เรียก
user.nameผู้ใช้จาก HTTP authentication (ถ้ามี)
http.request.methodHTTP method เช่น GET
url.originalpath ที่ร้องขอ
url.domainvirtual host (ถ้า log format มีชื่อ host)
http.versionเช่น HTTP/1.1
http.response.status_codeHTTP status code
source.bytesขนาด response ที่ส่งกลับ (byte)
http.request.referrerHTTP referrer
user_agent.originalUser-Agent
severityตาม status code: 5xx = high, 4xx = medium, 3xx = low, อื่นๆ = information
messageMETHOD path STATUS

error log (type: weberror)

ฟิลด์ ECSความหมาย
severityจาก level ของ log: emerg/alert/crit = critical, error = high, warn = medium, notice/info/debug = information
source.ipIP ของ client (Apache เท่านั้น)
messageข้อความ error
Restriction:เวลาใน error log ของ Apache และ Nginx ไม่มี timezone L-Flow จึงถือเป็น UTC ถ้าเครื่องไม่ได้ตั้งเวลาเป็น UTC เวลาของ error log จะคลาดจาก access log เท่ากับ timezone ของเครื่อง

ข้อความที่ไม่ได้แยกฟิลด์

log ของโปรแกรมที่ไม่อยู่ในหน้านี้ หรือข้อความที่ไม่ตรงรูปแบบที่ระบุ จะมีเพียง process.name, severity และ message ค้นเนื้อหาได้ด้วยการค้นข้อความใน message เช่น process.name:postfix "reject"

ติดตั้ง agent ดูที่ Linux · ฟิลด์ของ Windows ดูที่ ฟิลด์ของ Windows