หลายๆคนที่เคยใช้ Metasploit แล้วคงเคยใช้คำสั่ง getsystem กัน ซึ่งคำสั่งดังกล่าวเป็นการพยายามใช้ ieeature ต่างๆของ Windows ในการเพิ่มสิทธิ์ของตัวเอง (Privilege Escalation) ซึ่งตัวแรกที่ใช้งานใน getsystem นั่นคือ Named Pipe Impersonate Technique นั่นเอง เรามาดูกันว่าจริงๆแล้วมันคืออะไรกันแน่

Named pipe technique

โดยปกติแล้ว named pipe technique นั้นถูกติดตั้งใน Windows OS เพื่อให้ process พูดคุยกันได้ ซึ่ง pipe technique เป็นการใช้ file, network สำหรับการแลกเปลี่ยนข้อความระหว่าง process 2 process ที่จะต้องการแลกเปลี่ยนพูดคุยกัน โดย process จะทำการเขียนข้อความใส่ในไฟล์แล้วอีกฝ่ายก็มาอ่านไฟล์นั้นๆ

Pipes ยังถูกใช้ใน malware มากมาย เพื่อกระทำ covert comunication เช่น NotPetya Ransomware จะมีการสร้าง process ใหม่เพื่อทำการ dump password ของ user จากนั้นจะใช้ named pipe technique เพื่อสื่อสารไปยัง NotPetya Process เป็นต้น

แต่อะไรคือการปลอม(impersonating)  named pipe กันล่ะ?

ลองคิดภาพว่าเราเป็น service provider แล้วมีลูกค้าของเรามาขอให้เราทำการ query database ให้, เมื่อคุณเป็น provider คุณมีสิทธิ์ full access ไปยัง database นั้นอยู่แล้ว ส่วนลูกค้ามีสิทธิ์แค่จำกัดที่จะเข้าถึง database นั้นตามที่ควรจะเป็น เราสามารถใช้ credential ของลูกค้าเข้าไป query แทนให้ได้โดยเข้าไปในนามของลูกค้า ถ้าสิทธิ์ถูกก็จะสามารถ query ข้อมูลออกมาได้ ถ้าไม่สามารถ query ออกมาได้ อาจจะหมายถึง query นั้นจำเป็นต้องใช้สิทธิ์ที่สูงมากขึ้นในการดึงข้อมูลออกมา

แต่ถ้าลูกค้าเกิดมีสิทธิ์สูงกว่า service provider ขึ้นมาล่ะ, ลูกค้าสามารถที่จะส่งสิทธิ์เหล่านั้นไปยัง service provider ได้โดยการให้ใช้ credential ที่มีสิทธิ์ ซึ่งในเคสแบบนี้จะเกิดอะไรขึ้นถ้า provider นั้นนำ privilege account ของลูกค้าไปปลอมตัวเป็นลูกค้า (Impersonate) หรือเอาไปใช้ในทางที่ผิด

เหตุการณ์ข้างต้นก็เหมือกับเรื่อง Named Pipe นั่นเอง กล่าวคือถ้า process สร้าง pipe ขึ้นมา(เรียกว่าเป็น pipe owner หรือ pipe server) เพื่อจะใช้คุยกับ process อื่น เมื่อมี process อื่นติดต่อเข้ามายัง pipe ดังกล่าว (เรียกว่า pipe client) ตัว pipe server จะสามารถใช้สิทธิ์ของ pipe client (client’s security context หรือ the client’s access rights) ได้โดยอัตโนมัติ ซึ่งกลไกนี้เป็นกลไกที่ Windows ใช้เพื่อช่วยในการกระทำ activity ใดๆโดยใช้สิทธิ์ของ client ได้ ซึ่งสถานการณ์นี้เป็นในกรณีที่ server มีสิทธิ์เต็มแต่ client นั้นมีสิทธิ์จำกัด

ซึ่ง feature นี้สามารถ exploit ได้โดยการสร้าง pipe server ขึ้นมาโดย process ที่มี privilege ต่ำและให้ pipe client ที่สูงกว่ามาติดต่อ pipe server ซึ่งทำให้ตัว process ที่เป็น pipe owner ที่มี privilege ต่ำสามารถใช้สิทธิ์ของ client ไปเพิ่มสิทธิ์ของตัวเองได้นั่นเอง

ซึ่งใน Metasploit เมื่อเราใช้คำสั่ง getsystem ตัว Metasploit Process จะทำการสร้าง pipe server ที่มีสิทธิ์ต่ำขึ้นมา แล้วให้ Windows Service ซึ่งมีสิทธิ์เป็น SYSTEM มาเชื่อมต่อ pipe ดังกล่าวนั่นเอง เมื่อเราใช้คำสั่ง getsystem ตัว Meterpreter process จะกระทำการสร้าง pipe ขึ้นมา โดยจากในภาพตัวอย่างคือมีการสร้าง pipe ที่ชื่อว่า zpncie ขึ้นมา

 

โดยปกติแล้วใน Windows นั้นตัว Windows service สามารถรันในสิทธิ์ของ system user ได้อยู่แล้ว ดังนั้นสิ่งที่ Hacker ทำต่อมาคือการสร้าง service หรือ reconfigure service ปัจจุบันใดๆ แล้วส่ง message ไปหา pipe zpncie นั่นเอง

เมื่อ service ทำงาน ตัว cmd.exe ก็จะถูกรันขึ้นมาแล้วทำการติดต่อไปยัง pipe แล้วตัวที่เป็น pipe owner ก็จะได้สิทธิ์ high privilege ไป

powershell:: https://github.com/decoder-it/psgetsystem

Source:: Securityintelligencehttps://blog.xpnsec.com/becoming-system/