ใช้ของฟรีระวังของแถม! แฉเทคนิคฝัง Backdoor กับไฟล์คอนฟิก OpenVPN

สวัสดีครับหลังจากห่างหายกันไปนานวันนี้เราจะมาพูดถึงเทคนิคใหม่ในการฝังแบ็คดอร์ไว้ในไฟล์ตั้งค่าของโปรแกรม OpenVPN ซึ่งถูกค้นพบโดย Jacob Baines จาก Tenable Security กันครับ

อะไรคือแบ็คดอร์ประเภท Reverse Shell?

แบ็คดอร์ประเภท Reverse Shell เป็นแบ็คดอร์ที่เมื่อมีการติดตั้งลงบนเครื่องเป้าหมายแล้ว โปรแกรมของแบ็คดอร์จะมีการติดต่อกลับมายังเซิร์ฟเวอร์ตามหมายเลขไอพีแอดเดรสและพอร์ตที่เรากำหนดไว้กับโปรแกรมของแบ็คดอร์ ซึ่งจะแตกต่างกับแบ็คดอร์อีกประเภทหนึ่งคือ Bind Shell ที่จะฝังตัวและรอรับการเชื่อมต่อเข้ามาที่โปรแกรมของแบ็คดอร์อย่างเดียว

แบ็คดอร์ประเภท Reverse Shell ได้รับความนิยมสูงเนื่องจากโดยทั่วไปการตั้งค่าด้านความปลอดภัยนั้นมักจะไม่อนุญาตให้มีการเชื่อมต่อที่ไม่ได้รับอนุญาตเข้ามาในเครือข่ายแต่มักจะหละหลวมในการตั้งค่าการเชื่อมต่อในขาออกจากเครือข่าย ทำให้แบ็คดอร์ประเภท Reverse Shell นั้นถูกเลือกใช้บ่อยครั้งกว่าแบ็คดอร์แบบ Bind Shell

แก้ไขไฟล์ OVPN เพื่อฝังแบ็คดอร์

โปรแกรม OpenVPN นั้นจะถูกกำหนดการใช้งานในแต่ละครั้งด้วยไฟล์ตั้งค่าซึ่งใช้นามสกุลของไฟล์คือ OVPN โดยภายในไฟล์ OVPN นั้นจะมีการเก็บการตั้งค่าของการเชื่อมต่อเพื่อสร้างการเชื่อมต่อไปยังเซิร์ฟเวอร์ VPN เอาไว้

นักวิจัยด้านความปลอดภัยจาก Tenable Security “Jacob Baines” ค้นพบว่าโปรแกรม OpenVPN จะทำการรันหรือเอ็กซีคิวต์คำสั่งใดๆ ที่ต่อท้ายฟิลด์ “up” ซึ่งเป็นฟิลด์การตั้งค่าหนึ่งตามรูปแบบของ OVPN ดังนั้นหากมีการแก้ไขไฟล์ OVPN โดยการเพิ่มคำสั่งอันตรายต่อท้ายฟิลด์ “up” ผู้ใช้งานก็จะมีการรันคำสั่งที่เป็นอันตรายดังกล่าวทันทีเมื่อพยายามเชื่อมต่อ VPN

โดยทั่วไปไฟล์ตั้งค่า OVPN นั้นจะประกอบด้วยข้อมูลภายในดังต่อไปนี้ (ข้อมูลในไฟล์ OVPN อาจแตกต่างกันตามลักษณะการเชื่อมต่อ)

ตัวอย่างไฟล์ตั้งค่าการเชื่อมต่อ VPN ของโปรแกรม OpenVPN

การตั้งค่าในแต่ละบรรทัดมีความหมายดังต่อไปนี้

  • remote test.openvpn.com 12345 คือที่อยู่ของเซิร์ฟเวอร์ VPN และพอร์ตที่จะเชื่อมต่อไป
  • proto udp คือลักษณะการเชื่อมต่อไปยังเซิร์ฟเวอร์ VPN ซึ่งในที่นี้คือโปรโตคอล UDP
  • dev tap คือชื่อเน็ตเวิร์กอินเตอร์เฟสที่จะสร้างขึ้นเพื่อใข้ในการเชื่อมต่อ VPN
  • remote-cert-tls-server คือการระบุการเข้ารหัสสำหรับการเชื่อมต่อ VPN
  • auth-user-pass คือการระบุว่าการเชื่อมต่อ VPN นี้นั้นจะใช้ชื่อผู้ใช้งานและรหัสผ่านในการพิสูจน์ตัวตน
  • auth-nocache คือบังคับไม่ให้โปรแกรม OpenVPN ทำการจัดเก็บรหัสผ่านที่ใช้พิสูจน์ตัวตนไว้ในหน่วยความจำ
  • regen-sec 123456 คือระยะเวลาการเชื่อมต่อซึ่งเมื่อหมดเวลาตามที่ระบุไว้ในการตั้งค่านี้แล้ว ผู้ใช้งานจะต้องทำการเชื่อมต่อ VPN ใหม่ หากการตั้งค่านี้ถูกกำหนดค่าระยะเวลาเป็น 0 การเชื่อมต่อ VPN จะไม่มีวันหมดอายุ
  • regen-bytes 120000 คือ ขนาดของ Cipher
  • ส่วนล่างสุดเป็นใบอนุญาตหรือ Certificate ที่เราจะส่งไปเพื่อใช้ในการเข้ารหัสการเชื่อมต่อกับเซิร์ฟเวอร์ VPN โดยเราสามารถระบุเป็นชื่อของไฟล์เพื่ออ้างอิงไฟล์ Certificate แทนที่จะใส่ข้อมูลลงในไฟล์ OVPN แทนได้

มาเริ่มทดลองกันดีกว่าครับ

ในการทดลองครั้งนี้เราจะทำการใช้ใช้ฟิลด์ "up" ที่ทำให้เกิดการรันคำสั่งตามที่เรากำหนด โดยในตัวอย่างนี้เราจะทำการสร้างการเชื่อมต่อกลับไปยังเครื่องที่เราต้องการโดยใช้คำสั่ง bash ดังนี้

คำสั่ง bash ที่เพิ่มเข้าไปต่อท้ายฟิลด์ up ในไฟล์ OVPN

เมื่อทดลองเชื่อมต่อ VPN จากไฟล์ OVPN ที่มีการแก้ไขแล้ว ฝั่งของผู้โจมตีซึ่งมีการเปิดรับการเชื่อมต่อของแบ็คดอร์เอาไว้ก็จะสามารถรับการเชื่อมต่อและเข้าควบคุมเครื่องของผู้ใช้งานผ่านทาง shell ของผู้ใช้งานได้ทันที

ฝั่งของผู้โจมตีได้รับการเชื่อมต่อจากแบ็คดอร์และทำการเข้าควบคุมเครื่องของผู้ใช้งาน

การป้องกัน

ผู้ใช้งานควรเพิ่มความระมัดระวังเมื่อมีการใช้งาน VPN ที่เป็นสาธารณะและควรมีการตรวจสอบไฟล์ตั้งค่าของโปรแกรมก่อนมีการใช้งานเสมอ