วิธีเฝ้าระวัง Remote Desktop บน Windows Server

7 ธันวาคม 2016

NT cyfence
NT cyfenceทีมงาน NT cyfence ที่พร้อมให้คำปรึกษา และ ดูแลความปลอดภัยให้กับทุกองค์กร อย่างครบวงจร ด้วยทีมงานมืออาชีพ

Ransomware เป็นภัยคุกคามที่เราๆ ท่านๆ มักพบเจอได้ทุกวัน หลายท่านอาจไม่ทราบว่าหนึ่งในเหตุผลที่ทำให้เครื่อง Server ติด Ransomware คือการเปิดให้ใช้งาน Remote Desktop เข้ามาได้จากภายนอกนั่นเอง โดย Hacker ได้ใช้วิธีการเดารหัสผ่านในการ Login (bruteforce 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 สามารถทำได้

01-monitor-rdp-with-centralize-log-server

โดย Centralize Log Server ที่ใช้ในบทความนี้จะใช้เป็น Ubuntu Server 14.04.3 โดยมี IP เป็น 172.16.103.128 ขั้นตอนการติดตั้งมีดังนี้

  1. ก่อนอื่นให้ทำการ Update รายชื่อโปรแกรมของ Ubuntu เสียก่อน ด้วยคำสั่ง sudo apt-get update แล้วจึงทำการติดตั้ง Syslog-ng Server ด้วยคำสั่ง
    sudo apt-get install syslog-ng-core
  2. แก้ไขค่า 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); };

      รูปภาพการ set รับ log

      รูปภาพการ set รับ log

  3. เมื่อตั้งค่าแล้ว สั่ง Restart syslog-ng Server ด้วยคำสั่ง
    • sudo service syslog-ng restart
  4. ตรวจสอบการใช้งาน port 514(UDP) โดย syslog-ng

    รูปภาพการตรวจสอบ syslog-ng service

    รูปภาพการตรวจสอบ syslog-ng service

Windows Server 2012 R2

ในส่วน Windows Server ที่เปิดให้ใช้งาน Remote Desktop ซึ่ง โดยปกติแล้ว Windows Server ไม่สามารถ Set ส่ง Log ของเครื่องออกมาได้ ดังนั้นเราจึงต้องมีการติดตั้ง Syslog Agent เพิ่มเติม ซึ่งมีหลากหลายแบบและยี่ห้อให้เลือกใช้ โดย Agent ที่ใช้ในบทความนี้คือ Snare Open Source Agent โดยขั้นตอนการติดตั้งมีดังนี้

  1. Download Snare Open Source Agent คลิกเพื่อดาวน์โหลด Snare
  2. เมื่อ Download เรียบร้อยแล้ว ติดตั้งตามขั้นตอนปกติ (อย่าลืม enable Web Access นะครับ)
    04-monitor-rdp-with-centralize-log-server

    รูปภาพหน้าการติดตั้ง Snare Agent for windows

  3. เปิด Internet Explorer ขึ้นมาแล้วเข้าไปที่ http://localhost:6161 จะเป็น Web Console ของ Snare Agent
    05-monitor-rdp-with-centralize-log-server

    รูปภาพหน้า web console ของ Snare Agent

  4. ไปที่ Menu Network Configuration
  5. กำหนด IP ของ Centralize Log Server ในส่วน Destination Snare Server address และ Destination Port (172.16.103.128:514) จากนั้นไปด้านล่างสุดของ Page แล้วกด Change Configuration
    06-monitor-rdp-with-centralize-log-server

    รูปภาพ Configure Snare Agent ส่ง log ไปยัง Centralize Log Server

  6. ไปที่ Apply The Latest Audit Configuration จากนั้นกด Reload Settings

    07-monitor-rdp-with-centralize-log-server

    รูปภาพ reload settings ของ Snare Agent

    เมื่อถึงขั้นตอนนี้แล้วจะเป็นการเสร็จสิ้นการส่ง Log จากเครื่อง Windows Server 2012 R2 ให้กลับไปยัง Centralize Log Server เมื่อตรวจสอบไฟล์ /var/log/multi-device.log จะพบว่ามี Log ของ Windows Event Log ส่งมายัง Centralize Log Server

     

    รูปภาพ log ที่ถูกส่งมายัง Centralize Log Server

    รูปภาพ 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) วิธีการทำมีดังนี้

  1. ติดตั้ง SEC

    • sudo apt-get install sec
  2. สร้าง path สำหรับเก็บ rule ของ SEC

    • sudo mkdir /etc/sec/
  3. สร้าง 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

  4. จากนั้นใช้คำสั่ง
    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

เขียนโดย : Anonymous

บทความที่เกี่ยวข้อง