อนาคตใหม่ของชาว PowerShell กับโมดูล Microsoft.Graph ที่มาแทน Azure กับ MSOnline ???

ThaiCySec
4 min readApr 18, 2023

--

  • **หมายเหตุตัวโตๆ ก่อนนะคะว่าสำหรับสาย Cybersecurity ไม่ได้จะเอามาส่อง Sharepoint Site หรือ Exchange Email ใดๆ

“สกิลอนาคต (อันไกลโพ้น) คือฝึกใช้ PowerShell MgGraph ตั้งแต่ตอนนี้!”

*หมายเหตุ MgGraph = ชื่อโมดูล Microsoft Graph ตอนคอนเนกต์ แบบทำไมย่อว่า Mg ไม่ย่อ Ms ให้อ่านง่ายอ่ะ งง😮

(จริงๆ ชื่อโมดูลตอนอินสตอลก็ Microsoft.Graph ปกติแหละ แล้ว Mg ก็น่าจะ = Microsoft graph สำหรับใชัขึ้นต้นคอมมานด์เล็ด อย่าง Get-MgSecurityAlert ฟีลเหมือน Az แทน Azure ใน cmdlet อย่าง Get-AzVm งี้ ประเด็นคือพอเป็นคำสั่ง Connect- ที่ใช้ล็อกอินบัญชี M365/Azure ก็จะใช้คำสร้อยห้อยหลังแปลกๆ ให้เหนื่อยจำนิดนึง เช่น Connect-AzAccount แต่พอไมโครซอฟท์กราฟใช้ Connect-MgGraph แบบไมไม่ใช้ MgAccount ให้เป็นแพทเทิร์นเดียวกัน ยังไม่รวมชื่อโมดูล MSOnline ที่ทำไมไม่เขียนเป็น M365 ให้หายงง ตอนย่อในคอมเล็ดก็เป็น Msolบลาๆ แถมตอนคอนเนกต์ก็เขียนเป็น Connect-MsolService อีก ทำไมไม่ MsolAccount ในฐานะที่ชั้นก็สนใจด้านภาษาที่ไม่ใช่ภาษาโปรแกรมมิ่ง ก็อยากรู้ว่า Account/Graph/Service มีความแตกต่างอย่างมีนัยสำคัญที่เป็นประโยชน์ต่อมวลมนุษยชาติอย่างไรบ้าง)

จำไม่ได้ว่าไปเห็นข้อความนี้จากไหน แต่ก็เข้าเค้า เพราะ MS Graph เป็น API ที่เชื่อมโยงคลาวด์ MS ทั้ง M365 / Azure แบบครอบจักรวาลคิชเช่นโชว์ ใช้ตั้งแต่เรียกดูข้อมูลทั่วไปจนถึงปรับแต่งแก้ไขทุกระบบ

แน่นอนว่ากับระบบความปลอดภัย M365/Azure ภายใต้โมดูล Microsoft.Graph.Security ด้วย

ที่เต็มไปด้วยคำสั่งน่าใช้มากมาย คัฟเวอร์ตั้งแต่ 365 Defender ไปจนถึง Purview Compliance https://learn.microsoft.com/.../microsoft.graph.security/...

ส่วนสำหรับใครจะแย้งว่า มันมีโมดูลจัดการพวกนี้อยู่แล้น Connect-AzAccount หรือ MsolService ไปสิ ถ้าติดตามเพจอยู่เนืองๆ (โพสล่าสุดเรื่องพาวเวอร์เชลล์น่าจะกลางปีที่แล้ว) ก็น่าจะเห็นสัญญาณเตือนจาก MS มารัวๆ ที่เราบ่นว่าซับโมดูลนั้นก็ดีพรีชิเอท คำสั่งนู้นก็ใช้ไม่ได้แล้วแม้แต่บนคลาวด์เชลล์…

ก็เพราะนางประกาศจะให้แทนที่ทั้งหมดนี้ด้วย Connect-MgGraph ไงล่ะสาว

เหมือนบังคับให้เลือกอนาคตใหม่กลายๆ

(ค่ะ สำหรับท่านผู้รู้ผู้ตื่นผู้เคย Install-Module MicrosoftGraphSecurity แล้วฟีลเกรทฟีลสวยกับการ Get-GraphSecurityAlert ที่ดูง่ายไม่ต้องพิมพ์คอนเนคให้เสียเวลา เลาลองแล้วค่ะ ติดที่อี AppID นี่ล่ะ ดูมีขั้นตอนพิสดารในการรีจิสแอพที่ไม่ควรให้เราทำ ที่สำคัญได้กลิ่นการโดนดีพรีกลายๆ ด้วยค่ะ)

อ้อ นี่ไงหลักฐาน ว่าชั้นก็เทสอยู่นะไอ้โมดูล MicrosoftGraphSecurity ตัวติดกันแบบไม่มีจุดเนี่ย แต่อัลไลคือการหลอกถาม “Password” แต่นางเอาไปอ้างเป็น “AppID” โชว์หราแทนแบบนี้คะ😮

อย่างที่เราคุ้นกันก็ที่ใช้ทำ Authen เว็บแอพเราด้วยยูสบน AAD แบบโคตรง่าย (เราคุ้น แต่เธอว์คุ้นไหม) เป็นต้น

**หมายเหตุ2 — Graph มันก็มีหลายแบบ หลายแอพ Graph Explorer บ้าง MS Graph SDK บ้าง กราฟไลเนียร์บ้างพาราโบล่าบ้าง ฟิล์มก็มีบ้าน มีรถ มีมงกุฎ ดังนั้นจะมาเป็นคนสวยเหมือนกัน เอ้ย จะมามีเพอมิสชั่นเหมือนกันไม่ได้!

นั่นแหละค่ะคีย์เวิร์ด เรารู้ว่าจะใช้โมดูลใหม่ก็ต้อง Install/Import/Connect-Module นั้นก่อน (ถ้า Install ครั้งแรกในหน้านั้นก็อาจไม่ต้อง Import ซ้ำ ยกเว้นปิดเปิดหน้าพาวเวอร์เชลล์ใหม่)

แต่ตอน Connect โมดูล ที่เปิดหน้าบราวเซอร์ล็อกอินให้กดอนุญาตสิทธิ์เนี่ย หลายโมดูลโดยเฉพาะ Connect-MgGraph นางยึดหลักข้อที่ 2 ของ Zero-Trust เวอร์ชั่นของ MS คือ Least Privileged อย่างสุดฤทธิ์ ดังนั้นถ้าไม่กำหนด -Scope สิทธิ์ที่ต้องการใช้เจาะจงไป

ยูก็จะไม่ได้สิทธิ์นั้นค่ะ😲

แด่ดิชั้นผู้พลิกแผ่นดินหาวิธีสโคปเพอมิสชั่นออลบ้างดอกจันบ้างทั่วราชอาณาจักรก็หาไม่เจอ ต้องไปเดาสุ่มด้วยการงมหาคำใบ้ชื่อ Permissions ใน Graph Explorer เองก็ตาม

(ถาม bing chat GPT-4 ให้แล้วนะเคอะ นางช่วยได้แค่ใช้คำสั่ง Find-MgGraphPermission กับคำสั่งที่เราอยากใช้เพื่อใบ้ชื่อเพอมิสชั่นสำหรับใส่ใน Connect-MgGraph -Scope เพิ่มทีละอัน แต่ไม่มีวิธีสโคปออลอยู่ดีย์)

จริงๆ สาระโพสนี้ก็แค่สโคปให้ถูกตอนคอนเนกต์เท่านั้นล่ะค่ะ ถ้าเดาถูกแต่แรกก็จบตั้งแต่รูปที่ 5 แล้ว ไม่มั่วไปมาถึง 38 รูป ลามไป AAD Enterprise App Permissions บ้าบอคอแตกแบบนี้🤪

เอาจากคู่มือ Docs ทางการ นางก็แนะนำก่อนว่า Get-ExecutionPolicy ต้องเป็น RemoteSigned นะ พร้อมขั้นตอนที่เป็นมารยาทพื้นฐาน (ที่ควรข้าม) ก่อน Install-Module คือ การ Find-Module เช็คก่อนว่า PowerShell รู้จักชื่อโมดูลที่เราจะติดตั้งไหม อยู่ใน Repository ชื่ออะไร
คำสั่ง Get-Command -Module ทำให้รู้ว่าถ้าอยากใช้คำสั่งไหน ต้องลงโมดูลย่อยอันไหนบ้าง อย่างที่บอกเราสามารถเลือกติดตั้งเฉพาะโมดูลย่อยได้ แต่สายเราลงมันทั้ง Microsoft.Graph ล่ะค่ะ ใจจริงอยากหาวิธี -Scope ทั้งหมดอย่างว่าด้วย ไม่ค่อยอยาก Least Privilege เท่าไร 😛
ลองหมดแล้วค่ะ จะออล จะดอกจัน ไม่รอดหมด คืออัลไล อยากใช้คำสั่งไหนต้องคอย Find-MgGraphPermission หรือส่องโพยใน Graph Explorer > Consent แล้วมา Connect-MgGraph -Scope ทีละอันงี้เหรอ
จริงๆ ถามนางแต่แรกแล้วว่ามี Scope ฟีล Permit all ไหม แต่คำตอบนางก็ชวน Confusion ไปมาตามที่นางขอโทษนี่ล่ะ 555+

Sarah Hansakul

ThaiCySec Admin

fb.com/thaicysec

thaicysec.medium.com

youtube.com/thaicysec

tiktok.com/@thaicysec

#ThaiCySec

--

--

ThaiCySec
ThaiCySec

Written by ThaiCySec

We will bring Thai CyberSecurity team to conquer the world! fb.com/thaicysec

No responses yet