Security Testing คืออะไร มาหาวิธีให้ทำซอฟต์แวร์นั้นปลอดภัยมากขึ้น

Security Testing คือ การทดสอบซอฟต์แวร์ประเภท Non-functional Testing ที่สามารถค้นหาช่องโหว่ของซอฟต์แวร์หรือการเข้าถึงใดๆที่ไม่ได้รับอนุญาตจากระบบ ซึ่งอาจทำให้ซอฟต์แวร์เกิดความเสี่ยง เกิดภัยคุกคามและเกิดความเสียหายได้เช่น ข้อมูลด้านการเงินของลูกค้าถูกขโมยไป ข้อมูลสำคัญของบริษัทถูกเปิดเผย เป็นต้น การทดสอบแบบ Security Testing นั้นจะช่วยป้องกันการโจมตีต่อผู้บุกรุกได้ เพราะการทดสอบสามารถระบุช่องโหว่หรือจุดอ่อนของระบบและยังสามารถสร้างความมั่นใจว่าซอฟต์แวร์นั้นมีความปลอดภัย ปัจจุบันได้มีการแบ่งประเภทของ Security Testing ได้ดังนี้

1. Vulnerability Scanning
เป็นการทดสอบโดยใช้ซอฟต์แวร์อัตโนมัติ(Automated Software) เพื่อค้นหาจุดอ่อนหรือช่องโหว่ของซอฟต์แวร์

2. Security Scanning
เป็นการระบุจุดอ่อนของระบบรวมถึงเสนอแนวทางแก้ไขหรือลดความเสี่ยงที่อาจจะเกิดขึ้น การค้นหาจุดอ่อนนั้นสามารถให้นักทดสอบใช้ซอฟต์แวร์อัตโนมัติเข้ามาช่วยค้นหาได้

3. Penetration Testing
Penetration Test คือการทดสอบประเภทนี้จะเป็นการจำลองว่าระบบถูกโจมตีโดย Hacker ในการทดสอบนั้นจะทำให้ทราบว่า ระบบมีช่องโหว่หรือไม่ ระบบสามารถป้องกันการโจมตีจาก Hacker ภายนอกได้หรือไม่และหากมีการโจมตีเกิดขึ้นระบบจะถูกโจมตีจากจุดใดเพื่อหาแนวทางป้องกันต่อไป

4. Risk Assessment
ในการทดสอบนี้จะเป็นการวิเคราะห์ถึงความเสี่ยงที่อาจเกิดขึ้นโดยมีการจัดกลุ่มความเสี่ยงไว้เป็นกลุ่ม เช่น ความเสี่ยงระดับสูง ระดับกลาง และระดับต่ำ เป็นต้น การจัดกลุ่มความเสี่ยงนั้นจะทำให้ง่ายต่อการจัดการและลดความเสี่ยงของซอฟต์แวร์ได้

5. Security Auditing
เป็นการตรวจสอบซอฟต์แวร์อย่างละเอียดโดยการค้นหาข้อผิดพลาดที่อาจเกิดขึ้นจาก code ทุกบรรทัด

6. Ethical Hacking 
เป็นการทดสอบการ Hack ซอฟต์แวร์แต่ไม่ได้มีจุดประสงค์ทำลายหรือขโมยข้อมูลของระบบ เป็นการ Hack เพื่อตรวจสอบที่บกพร่องที่จะส่งผลกระทบต่อความปลอดภัยของระบบ

7. Posture Assessment
เป็นการทดสอบโดยใช้หลายเทคนิคคือ Scan การประเมินความเสี่ยง และการทดสอบ Hack โดยไม่หวังผลทำลายระบบ

Penetration Test การค้นหาช่องโหว่ที่มีประสิทธิภาพสูง
     ในหัวข้อนี้จะเป็นการขยายความของ Penetration Test โดยละเอียด เพราะการทดสอบแบบนี้เป็นที่นิยมและสามารถป้องกันช่องโหว่ที่อาจเกิดขึ้นได้ เพื่อง่ายต่อความเข้าใจว่า Penetration Test นั้นคืออะไรสามารถเข้าใจง่ายๆด้วยตัวอย่างของบ้าน


สมมติว่าบ้านของเราต้องการความปลอดภัยสูง ต้องการป้องกันไม่ให้โจรมาบุกรุกบ้านของเรา หากใช้ Penetration Test ในการทดสอบเราจะเริ่มจากการจ้างผู้เชี่ยวชาญมาหาช่องโหว่จากบ้านของเราว่าจุดไหนที่โจรอาจจะลักลอบเข้ามาได้ เช่น ประตูระบบล๊อคอยู่ในสภาพพร้อมใช้งานหรือเปล่า หน้าต่างมีบานไหนชำรุดหรือเปล่า โจรสามารถปีนเข้าทางปล่องควันของบ้านได้หรือไม่ เป็นต้น ในระหว่างการทดสอบ ผู้เชี่ยวชาญจะสมมติบทบาทด้วยว่าตัวเองเป็นโจรและพยายามหาทางเข้าบ้านให้ได้จากช่องโหว่ที่มีอยู่ ซึ่งจะทำให้เราทราบว่าบ้านเรามีช่องโหว่ตรงไหนบ้างและมีแนวทางแก้ไขอย่างไร การทดสอบ Penetration Test นั้นจะแบ่งออกเป็น 2 ชนิดคือ
  • White Box เป็นการทดสอบโดยที่คน Test รู้ Configurations ต่างๆของระบบเสมือนเป็นคนภายในองค์กร ใช้ข้อมูลเหล่านี้พยายามหาช่องโหว่ของระบบซึ่งจะทำให้ทราบได้ว่าระบบนั้นมีความปลอดภัยหรือไม่
  • Black Box คน Test จะไม่ทราบข้อมูล Configurations ของระบบจะทราบเพียงข้อมูลที่เป็น Public เช่น Web URL, Domain, ชื่อบริษัท เป็นต้น มาค้นหาช่องโหว่ของระบบ
ในขั้นตอนการทดสอบ Penetration Test นั้นจะมีวิธีการทดสอบอยู่ 2 วิธีด้วยกันคือ Automated pen test กับ Manual pen test การทดสอบแบบ Automated นั้นโดยทั่วไปแล้วจะสร้าง Scripts กับเครื่องมือที่เลือกใช้ขึ้นมาเพื่อทดสอบ ซึ่งมีข้อดีคือสามารถที่จะนำ Scripts กลับมาใช้ซ้ำได้ ส่วนการทดสอบแบบ Manual นั้นจะอาศัยผู้ที่เชื่ยวชาญมาออกแบบวิธีการทดสอบเพื่อค้นหาช่องโหว่ของระบบ

ขั้นตอนในการทดสอบ Penetration Test

1. Scope Definition คือการกำหนดขอบเขตหรือเป้าหมายว่าการทำ Pen Test ครั้งนี้มีวัตถุประสงค์อะไร เช่น ต้องการค้นหาช่องโหว่และปรับปรุงระบบให้ดีขึ้น วางแผนและกำหนดระบบที่ต้องการทดสอบ กำหนดว่าใครจะเป็นผู้ทดสอบครั้งนี้

2. Reconnaissance เป็นการ Scan ระบบก่อนเพื่อค้นหาช่องโหว่และวิธีการที่ Hacker อาจใช้เพื่อโจมตีระบบเช่น Host, Subdomains เป็นต้น

3. Vulnerability Assessment การประเมินช่องโหว่นั้นจะเป็นประเมินว่าหาก Hacker รู้อะไรเกี่ยวกับระบบบ้าง Hacker จะใช้ความรู้อะไรหรือเทคโนโลยีอะไรที่จะสามารถเจาะระบบได้  จากนั้นก็สร้างแบบจำลองที่จะมาค้นหาช่องโหว่ อย่างไรก็ตามขั้นตอนนี้เป็นเพียงการประเมินยังไม่ได้ทดสอบเจาะระบบจริงๆ

4. Penetration attempt เป็นการนำช่องโหว่ที่ค้นพบมาทดสอบเจาะหรือโจมตีระบบโดยผู้เชี่ยวชาญ

5. Lateral movement หมายถึง Hacker เคยได้รับสิทธิในการเข้าระบบครั้งแรกแล้วจากนั้นก็ค้นหาข้อมูลสำคัญอื่นๆต่อไปเรื่อยๆ เช่น Network หรือข้อมูล Configuration ต่างๆ เมื่อ Hacker สามารถเข้าถึงข้อมูลสำคัญได้แล้วก็จะเจาะระบบอย่างต่อเนื่องเพื่อรับสิทธิและล้วงเอาข้อมูลสำคัญอื่นๆต่อไปเรื่อยๆ

6. Risk analysis and post-test recommendations เป็นขั้นตอนการสรุปความเสี่ยง ช่องโหว่ และคำแนะนำที่อาจเกิดขึ้นกับระบบ

7. Utilize the Testing Results เป็นการจัดทำรายงานแบบละเอียด โดยอธิบายถึงความเสี่ยง วิเคราะห์ถึงผลกระทบที่จะได้รับ ลำดับความสำคัญของปัญหาและแนวทางแก้ไข

ทดลองทำ Penetration Test ด้วย Burp Suite
     Burp Suite เป็นเครื่องมือยอดนิยมตัวหนึ่งที่นำมา Scan เพื่อหาช่องโหว่บน Web Application หลักการทำงานของ Burp Suite นั้นจะทำตัวเป็น Proxy(Burp Proxy) ที่อยู่ระหว่าง Web Browser และ Web Server ดังนั้นค่าต่างๆจะผ่านตัว Burp Proxy ซึ่งทำให้สามารถดักจับ HTTP ต่างๆได้

ใช้เพื่อการเรียนรู้เท่านั้น การแฮกเว็บมีความผิดตาม พรบ.คอมพิวเตอร์

     ในตัวอย่างนี้จะใช้ Burp Suite ในการ Brute Force Attack ซึ่งเป็นการเดาความเป็นไปได้ของ Username และ Password จนกว่าจะพบ Username และ Password ที่ถูกเพื่อเข้าไปในระบบ Applicationโดยเฉพาะ CMS Tools ที่มักตั้งค่าเริ่มต้นของ Username และ Password มาให้แต่ Developer อาจจะลืมเปลี่ยนทำให้ Hacker สามารถเข้าถึงระบบได้อย่างง่ายดาย

ทดลอง Brute Force Attack จาก Login Form ของเว็บไซต์ที่อนุญาตให้ทดลองโจมตี


ใช้ Burp Scan หา http request เพื่อหาค่าตัวแปรต่างๆจากหน้าเว็บ


ใส่ค่า Username ที่เป็นไปได้ทั้งหมด (Payload 1)


ใส่ค่า Password ที่เป็นไปได้ทั้งหมด (Payload 2) จากนั้นกด Start Attack


โปรแกรมจะ Random คู่ Username และ Password ไปเรื่อยๆ จนได้คู่ที่สามารถเข้าระบบได้ (Status 302) 

เจาะระบบด้วย SQL Injection
     เป็นการเข้าถึงระบบโดยใช้ช่องโหว่จากคำสั่ง SQL ที่ถูกสร้างขึ้นอย่างไม่ปลอดภัย ทำให้ Hacker สามารถเข้าไปยังฐานข้อมูลและโจมตีระบบได้ การโจมตีนั้นมักจะเกิดกับช่องกรอกข้อมูลต่างๆ (Input form) เพราะ Developer มักจะสร้างชุดคำสั่ง SQL ไว้ โดยเฉพาะหากเกิดข้อผิดพลาดที่ Login Form แล้วจะทำให้ Hacker เข้าถึงระบบและขโมยข้อมูลต่างๆได้อย่างง่ายดาย 

SELECT * FROM users WHERE email=‘$email’ and password=md5('$password');

SELECT * FROM users WHERE email=‘xxx@xxx.xxx’ and password=md5('xxx') OR 1 = 1 --]');

SELECT * FROM users WHERE FALSE AND FALSE OR TRUE

SELECT * FROM users WHERE FALSE OR TRUE

SELECT * FROM users WHERE TRUE

โดยทั่วไปแล้วการเข้าระบบจะป้อน username และ password ที่ถูกต้องเข้ามา(สีน้ำเงิน) แต่ลักษณะของ SQL Injection คือ Hacker จะฝังคำสั่ง xxx') OR 1 = 1 -- ] (สีเหลือง) เข้ามาด้วยคือ Hacker จะป้อน ค่า username ที่ผิดมาและจาก SQL จะมีเงื่อนไขเพิ่มขึ้นมาคือรหัสผ่านเป็น FALSE AND FALSE OR TRUE (บรรทัดที่ 3) และจากเงื่อนไข FALSE AND FALSE จะทำให้เหลือเพียง FALSE เดียว(บรรทัดที่ 4) ซึ่งบรรทัดที่ 4 จะพบคำสั่ง OR คือข้อมูลจะเป็นอะไรนั้นไม่สนใจแต่ขอข้อมูลที่เป็นจริงประกอบอยู่ ทำให้ FALSE ถูกตัดทิ้งเหลือเพียง TRUE(บรรทัดที่ 5) จึงทำให้ Hacker สามารถเข้าถึงฐานข้อมูลได้

ใส่คำสั่ง SQL Injection ลงไปในช่อง Password


สามารถเข้าถึงระบบได้โดยไม่จำเป็นต้องรูปรหัสที่แท้จริง




Reference:
- https://www.educba.com/security-testing/
- https://www.guru99.com/what-is-security-testing.html#1
- https://kirkpatrickprice.com/blog/7-stages-of-penetration-testing/
- https://www.securecoding.com/blog/penetration-testing-steps/
- https://www.youtube.com/watch?v=2_lswM1S264

ป้ายกำกับ

แสดงเพิ่มเติม

บทความยอดนิยม

Software Development Life Cycle (SDLC) คืออะไร ทำไมจำเป็นต่อการพัฒนาซอฟต์แวร์

ม.ปลายอยากเข้าสายคอม วิทยาการคอม วิศวกรรมคอม เตรียมตัวอย่างไร ต้องมีพื้นฐานอะไรบ้าง

Automation testing หรือ การทดสอบซอฟต์แวร์อัตโนมัติ คืออะไร ทำไมถึงสำคัญต่อการทดสอบซอฟต์แวร์

วิธีเก็บ วิเคราะห์ รวบรวม requirement อย่างไรให้มีประสิทธิภาพ

Performance Test คือ อะไร วัดประสิทธิภาพของระบบ ล่มไม่ล่ม จะรู้ได้อย่างไร

8 สิ่งที่ AI จะมาเปลี่ยนโลกในอนาคต

ถอดรหัสความลับเครื่อง Enigma จุดเริ่มต้นและจุดจบของสงครามโลกครั้งที่ 2