วิธีเฝ้าระวัง Remote Desktop บน Windows Server
7 ธันวาคม 2016
Ransomware เป็นภัยคุกคามที่เราๆ ท่านๆ มักพบเจอได้ทุกวัน หลายท่านอาจไม่ทราบว่าหนึ่งในเหตุผลที่ทำให้เครื่อง Server ติด Ransomware คือการเปิดให้ใช้งาน Remote Desktop เข้ามาได้จากภายนอกนั่นเอง โดย Hacker ได้ใช้วิธีการเดารหัสผ่านในการ Login (brute–force attack) เมื่อเดารหัสผ่านได้สำเร็จจึงนำ Ransomware ไปติดตั้งเครื่อง Server เหล่านั้นเพื่อเรียกค่าไถ่ ดังจะเห็นได้จากข่าวนี้ครับ
ซึ่งบริษัทส่วนใหญ่มักจะไม่ได้เฝ้าระวังภัยคุกคามในลักษณะแบบนี้ บทความนี้จะเขียนถึงวิธีการเฝ้าระวัง Server จาก Ransomware โดยผ่าน Centralize Log Server
Centralize Log Server
การเฝ้าระวัง Server นั้นทำได้หลายแบบ แต่วิธีการที่เราแนะนำในวันนี้จะเป็นการนำเอา Centralize Log Server มาเป็นตัวช่วยในการเก็บ Log ซึ่ง Centralize Log Server นั้นความจริงเป็น Server ที่ใช้ในการเก็บ Log จาก Server และ Security Device อื่นๆ โดยทั้งนี้ การส่ง Log ออกมาจากเครื่อง Server ต่างๆ มาเก็บยัง Centralize Log Server เพื่อกันการถูกแก้ไข Log ในกรณีที่เครื่องนั้นๆถูกแฮ็คแล้ว Hacker อาจจะไปแก้ไขหรือลบ Log ภายในเครื่องเพื่ออำพรางการแฮ็คของตัวเองก็เป็นสิ่งที่ Hacker สามารถทำได้
โดย Centralize Log Server ที่ใช้ในบทความนี้จะใช้เป็น Ubuntu Server 14.04.3 โดยมี IP เป็น 172.16.103.128 ขั้นตอนการติดตั้งมีดังนี้
- ก่อนอื่นให้ทำการ Update รายชื่อโปรแกรมของ Ubuntu เสียก่อน ด้วยคำสั่ง sudo apt-get update แล้วจึงทำการติดตั้ง Syslog-ng Server ด้วยคำสั่ง
sudo apt-get install syslog-ng-core
- แก้ไขค่า Config Syslog-ng ให้เพิ่มการเปิดรับ Log เพิ่มที่ port 514(UDP) และบันทึก Log ลงใน /var/log/multi-device.log โดยทำการเปิดไฟล์ /etc/syslog-ng/syslog-ng.conf เพื่อแก้ไข
- เพิ่มการรับ Log ที่ port 514(UDP)
source s_udp { udp(ip(0ap.0.0.0)); }; - กำหนดปลายทางการบันทึก Log
destination network { file(“/var/log/multi-device.log”); }; - นำ configuration source และ destination มาใช้งาน
log { source(s_udp); destination(network); };
- เพิ่มการรับ Log ที่ port 514(UDP)
- เมื่อตั้งค่าแล้ว สั่ง Restart syslog-ng Server ด้วยคำสั่ง
- sudo service syslog-ng restart
- ตรวจสอบการใช้งาน port 514(UDP) โดย syslog-ng
Windows Server 2012 R2
ในส่วน Windows Server ที่เปิดให้ใช้งาน Remote Desktop ซึ่ง โดยปกติแล้ว Windows Server ไม่สามารถ Set ส่ง Log ของเครื่องออกมาได้ ดังนั้นเราจึงต้องมีการติดตั้ง Syslog Agent เพิ่มเติม ซึ่งมีหลากหลายแบบและยี่ห้อให้เลือกใช้ โดย Agent ที่ใช้ในบทความนี้คือ Snare Open Source Agent โดยขั้นตอนการติดตั้งมีดังนี้
- Download Snare Open Source Agent คลิกเพื่อดาวน์โหลด Snare
- เมื่อ Download เรียบร้อยแล้ว ติดตั้งตามขั้นตอนปกติ (อย่าลืม enable Web Access นะครับ)
- เปิด Internet Explorer ขึ้นมาแล้วเข้าไปที่ http://localhost:6161 จะเป็น Web Console ของ Snare Agent
- ไปที่ Menu Network Configuration
- กำหนด IP ของ Centralize Log Server ในส่วน Destination Snare Server address และ Destination Port (172.16.103.128:514) จากนั้นไปด้านล่างสุดของ Page แล้วกด Change Configuration
- ไปที่ Apply The Latest Audit Configuration จากนั้นกด Reload Settings
เมื่อถึงขั้นตอนนี้แล้วจะเป็นการเสร็จสิ้นการส่ง Log จากเครื่อง Windows Server 2012 R2 ให้กลับไปยัง Centralize Log Server เมื่อตรวจสอบไฟล์ /var/log/multi-device.log จะพบว่ามี Log ของ Windows Event Log ส่งมายัง Centralize Log Server
Centralize Log Server
ย้อนกลับมาที่ Centralize Log Server เพราะสิ่งที่จะทำต่อคือการเฝ้าระวัง Windows Event Log ที่ต้องการ โดยจุดประสงค์ของเราคือการคอยตรวจสอบการเดารหัสผ่าน ดังนั้นเราต้องคอยตรวจสอบ Windows Event ID 4625 (Unknown user name or bad password) หากได้รับเยอะจนผิดสังเกตให้ทำการแจ้งเตือนผู้ดูแล โดยเครื่องมือที่เราจะใช้เพื่อคอยตรวจสอบ Event ดังกล่าว จะใช้เครื่องมือที่ชื่อว่า SEC (Simple Event Correlator) วิธีการทำมีดังนี้
- ติดตั้ง SEC
- sudo apt-get install sec
- สร้าง path สำหรับเก็บ rule ของ SEC
- sudo mkdir /etc/sec/
- สร้าง Rule ขึ้นมาว่าหากมีการเกิด Windows Event ID 4625 และ Pattern ของ Log ตามที่เป็นตัวอย่างข้างต้นมากกว่า 10 ครั้งภายใน 1 นาที ให้ทำการส่งเมลไปหา [email protected] dPattern ของ Log ดังกล่าว จะใช้ดักจับรูปแบบด้วย Regular Expression (regex) สามารถใช้เครื่องมือในการเขียนและทดสอบ regex แบบ online ที่ https://regex.101.com
เราสามารถเขียน regular expression ในการตรวจจับ Windows event log ที่เป็น Event ID 4625 ได้เป็น\S+\s+\d+\d+\:\d+\:\d+\s(\d+.\d+.\d+.\d+).*\t4625\tMicrosoft-Windows-Security-Auditing\t([a-zA-Z0-9+\\-]+).*Workstation\sName\:\s+([a-zA-Z0-9-]+)\s+Source\sNetwork\sAddress\:\s([0-9.-]+)\s.*
ดังนั้น Rule ของ SEC ออกมาจะได้เป็น
# create the context on the initial triggering cluster of events
type=SingleWithThreshold
ptype=RegExp
pattern=\S+\s+\d+\d+\:\d+\:\d+\s(\d+.\d+.\d+.\d+).*\t4625\tMicrosoft-Windows-Security-Auditing\t([a-zA-Z0-9+\\-]+).*Workstation\sName\:\s+([a-zA-Z0-9-]+)\s+Source\sNetwork\sAddress\:\s([0-9.-]+)\s.*desc=Possible brute force attack (RDP) user $2 on $1 from $4
window=60
thresh=10
action=create SSH_BRUTE_FROM_$5 60 (report SSH_BRUTE_FROM_$5 /usr/bin/mail -s “ssh brute force attack on $1 from $5” [email protected]);
type คือ option สำหรับการกำหนดลักษณะการ Correlate ของ SEC โดยในที่นี้
เราใช้เป็น Singlewiththreshold เพื่อจะเป็นการ Trigger rule เมื่อมีการเกิด
Event id 4625 ตามที่เรากำหนดptype คือลักษณะการจับ pattern pattern คือ regular expression ที่ใช้ในการตรวจจับ pattern dec คือคำอธิบายของ rule ที่ผู้สร้างเขียนเอง window คือกำหนดระยะเวลาในการตรวจสอบ threshold thresh คือกำหนดจำนวนครั้งสูงสุดที่จะทำให้ rule นี้ทำงาน action คือการกระทำของ Rule เมื่อตรงตามเงื่อนไขที่เรากำหนด เราจะสร้าง rule ดังกล่าวไว้ใน path /etc/sec/brute_force.conf โดยใช้คำสั่ง
sudo vim /etc/sec/brute_force.conf - จากนั้นใช้คำสั่ง
sec –conf=/etc/sec/brute_force.conf –input=/var/log/multi-device.log
เมื่อมีการใส่รหัสผ่านผิด 10 ครั้งภายใน 1 นาที Sec จะทำการส่งเมลไปหา [email protected] พร้อมกับระบุข้อความเป็น “ssh brute force attack on <ชื่อเครื่อง Window Server> from <เครื่อง Hacker>”
สรุป
นี่เป็นแค่วิธีเฝ้าระวังวิธีหนึ่ง แต่สิ่งสำคัญเราต้องไม่มองข้ามข้อผิดพลาดเล็กๆน้อยๆ ในเรื่องความปลอดภัย เช่น ไม่ตั้ง Password ง่ายเกินไป หรือ ไม่ใช้ Username Administrator โดยใช้ Username อื่นแทน เป็นต้น และแม้เราจะมีระบบที่คอยเฝ้าระวังแค่ไหนก็ตาม แต่วิธีที่ดีที่สุดคือไม่อนุญาตให้สามารถ Remote desktop ได้จากภายนอกจะปลอดภัยมากกว่าครับ
Reference
- http://simple-evcorr.sourceforge.net/SEC-tutorial/article.html
- http://arstechnica.com/information-technology/2005/05/linux-20050519/
- https://regex101.com
เขียนโดย : Anonymous
บทความที่เกี่ยวข้อง