Post นี้แนว def ครับ เป็น basic เรื่องนึง ที่น่าสนใจครับ เกี่ยวกับการ tamper ข้อมูลครับ
จากที่อ่านหนังสือ The Web Application Hacker's Handbook เกี่ยวกับเรื่อง tamper ตัวข้อมูล ใน ASP.NET (หรือตัว ViewState) ซึ่งจะเป็นค่าที่มีการ encode ด้วย base64 แต่ในกรณีที่ผู้โจมตีหรือไม่ประสงค์ดีสามารถ decode ตัว base64 ได้ ก็อาจจะสามารถรู้ข้อมูลที่ส่งผ่านระหว่าง client กับ server ได้ และก็จะสามารถแก้ไขข้อมูลของผู้ส่งได้เช่นกัน
ทีนี้ ASP.NET เลยมีกระบวนการที่เรียกว่า MAC ย่อมาจาก Message Authentication Code มาเพื่อจัดการเรื่องนี้ เพราะ MAC เป็นกระบวนการที่จะช่วยยืนยันได้ว่า message ที่ส่งระหว่าง sender กับ receiver นั้นถูกต้องไหม ? ดูรูปด้านล่างนะครับ
Ref : https://en.wikipedia.org/wiki/Message_authentication_code#Example
1. ดูในกรอบสีฟ้าด้านซ้ายก่อน จะเห็นว่า message ของผู้ส่ง จะถูกทำการ hash ด้วย ด้วย Key(K) ซึ่งเป็น private key ได้ออกมาเป็น MAC สีเขียว
2. การส่งจะส่งทั้ง message เดิม รวมไปกับ MAC
3. เมื่อมาถึงผู้รับ ในกรอบสีเหลืองด้านขวา จะเห็นว่า ผู้รับ จะนำเอา message ในทำการ hash ด้วย private key (K) เหมือนกับผู้ส่ง ได้ผลออกมาเป็น MAC สีเขียว
4. คราวนี้ ก็นำเอา MAC ของผู้ส่ง กับ MAC ของผู้รับมาเปรียบเทียบกัน ถ้าตรงกันก็จบคือ message ต้นฉบับไม่ได้ถูกแก้ไขเปลี่ยนแปลง แต่ถ้าค่า MAC ไม่ตรงกัน แสดงว่ามีอะไรผิดปกติกับต้นฉบับแล้ว
ต้องอย่าลืมว่า Key(K) ต้องมีการตกลงกันก่อนระหว่างผู้ส่งกับผู้รับนะครับ ซึ่งจะเป็น key เดียวกัน
Remark : MAC ไม่ใช่การ encrypt นะครับ เป็นการ verify ความถูกต้อง
โดย default ตัว MAC จะถูก enable อยู่แล้ว แต่ถ้าต้องการที่จะ disable มัน (ด้วยเหตุผลใดๆก็แล้วแต่ ซึ่งไม่สมควร) ก็สามารถทำได้ 2 วิธีดังนี้
1. disable ใน web.config
<pages enableViewStateMac="false" />
2. disable ในแต่ละ page เอง
<%@ page EnableViewStateMac="false" %>
แต่อย่างที่บอกไปนะครับ ว่าไม่สมควร disable เพราะมีความเสี่ยงที่จะถูกเปลี่ยนแปลงข้อมูลโดยผู้ไม่ประสงค์ดีได้ จากฝั่ง client ได้
คราวนี้ถ้าเกิดอยากจะ test ว่ามีการปิดการทำ MAC อยู่ไหม ก็มี online tools อันนึงคือ AsafaWeb https://asafaweb.com/ อันนี้นะครับ ใช้สำหรับ test ไม่เฉพาะแต่ MAC เท่านั้น สามารถ test ได้อีกหลายอย่างเลย แค่ใส่ url ลงไป
ถ้า disable ก็จะขึ้นประมาณนี้
กรณีที่ไม่ใช่ asp.net มันไม่มี viewstate ก็จะขึ้นแบบด้านล่างครับ
(จากภาพด้านบนจะเห็นว่ามีการ enable MAC )
หรือถ้าใครไม่มี burp ก็ใช้ online ก็ได้ที่ http://viewstatedecoder.azurewebsites.net/ ออกมาเหมือนๆกัน
จากที่อ่านหนังสือ The Web Application Hacker's Handbook เกี่ยวกับเรื่อง tamper ตัวข้อมูล ใน ASP.NET (หรือตัว ViewState) ซึ่งจะเป็นค่าที่มีการ encode ด้วย base64 แต่ในกรณีที่ผู้โจมตีหรือไม่ประสงค์ดีสามารถ decode ตัว base64 ได้ ก็อาจจะสามารถรู้ข้อมูลที่ส่งผ่านระหว่าง client กับ server ได้ และก็จะสามารถแก้ไขข้อมูลของผู้ส่งได้เช่นกัน
ทีนี้ ASP.NET เลยมีกระบวนการที่เรียกว่า MAC ย่อมาจาก Message Authentication Code มาเพื่อจัดการเรื่องนี้ เพราะ MAC เป็นกระบวนการที่จะช่วยยืนยันได้ว่า message ที่ส่งระหว่าง sender กับ receiver นั้นถูกต้องไหม ? ดูรูปด้านล่างนะครับ
Ref : https://en.wikipedia.org/wiki/Message_authentication_code#Example
1. ดูในกรอบสีฟ้าด้านซ้ายก่อน จะเห็นว่า message ของผู้ส่ง จะถูกทำการ hash ด้วย ด้วย Key(K) ซึ่งเป็น private key ได้ออกมาเป็น MAC สีเขียว
2. การส่งจะส่งทั้ง message เดิม รวมไปกับ MAC
3. เมื่อมาถึงผู้รับ ในกรอบสีเหลืองด้านขวา จะเห็นว่า ผู้รับ จะนำเอา message ในทำการ hash ด้วย private key (K) เหมือนกับผู้ส่ง ได้ผลออกมาเป็น MAC สีเขียว
4. คราวนี้ ก็นำเอา MAC ของผู้ส่ง กับ MAC ของผู้รับมาเปรียบเทียบกัน ถ้าตรงกันก็จบคือ message ต้นฉบับไม่ได้ถูกแก้ไขเปลี่ยนแปลง แต่ถ้าค่า MAC ไม่ตรงกัน แสดงว่ามีอะไรผิดปกติกับต้นฉบับแล้ว
ต้องอย่าลืมว่า Key(K) ต้องมีการตกลงกันก่อนระหว่างผู้ส่งกับผู้รับนะครับ ซึ่งจะเป็น key เดียวกัน
Remark : MAC ไม่ใช่การ encrypt นะครับ เป็นการ verify ความถูกต้อง
โดย default ตัว MAC จะถูก enable อยู่แล้ว แต่ถ้าต้องการที่จะ disable มัน (ด้วยเหตุผลใดๆก็แล้วแต่ ซึ่งไม่สมควร) ก็สามารถทำได้ 2 วิธีดังนี้
1. disable ใน web.config
<pages enableViewStateMac="false" />
2. disable ในแต่ละ page เอง
<%@ page EnableViewStateMac="false" %>
แต่อย่างที่บอกไปนะครับ ว่าไม่สมควร disable เพราะมีความเสี่ยงที่จะถูกเปลี่ยนแปลงข้อมูลโดยผู้ไม่ประสงค์ดีได้ จากฝั่ง client ได้
คราวนี้ถ้าเกิดอยากจะ test ว่ามีการปิดการทำ MAC อยู่ไหม ก็มี online tools อันนึงคือ AsafaWeb https://asafaweb.com/ อันนี้นะครับ ใช้สำหรับ test ไม่เฉพาะแต่ MAC เท่านั้น สามารถ test ได้อีกหลายอย่างเลย แค่ใส่ url ลงไป
ผมลอง scan ให้ดู อันล่างนี้ จะสังเกตว่า มีการ enable view state MAC
ถ้า disable ก็จะขึ้นประมาณนี้
กรณีที่ไม่ใช่ asp.net มันไม่มี viewstate ก็จะขึ้นแบบด้านล่างครับ
Reference : https://www.troyhunt.com/understanding-and-testing-for-view/
คราวนี้เรามาลองดูในมุมของคนทำ Pentest บ้าง เวลาทำระบบที่เป็น ASP.Net ที่ใช้ viewstate เราก็มีเครื่องมือที่ใช้ในการ decode ค่า ViewState ไม่ใช่ใครที่ไหน Burp เช่นเดิม ใน Burp จะมี feature ในการ decode และ render ออกมาเป็นค่าที่เราอ่านได้ง่าย ตามภาพนะครับ
(จากภาพด้านบนจะเห็นว่ามีการ enable MAC )
หรือถ้าใครไม่มี burp ก็ใช้ online ก็ได้ที่ http://viewstatedecoder.azurewebsites.net/ ออกมาเหมือนๆกัน
Comments
Post a Comment