Race Condition 101
ชองโหวที่แขงกับเวลาและเงื่อนไข
Copyright © 2015 by Pichaya Morimoto.
แจกจายหรือนําไปใชไดเต็มที่ไมตองขอแคลงเครดิตไวก็พอ
Mr. Pichaya Morimoto
June 5, 2015
ที่มา: https://cwe.mitre.org/data/definitions/362.html
Race Condition คือ?
การทํางานตามลําดับของโคดสวน A ที่(อาจ)
ทํางานรวมกับโคดสวนอื่น ซึ่ง อาจใช
ทรัพยากร (ไฟล, ขอมูล, อุปกรณ ฯลฯ)
รวมกัน แตในระหวาง "เวลา" ที่โคด A
กําลังทํางานตามลําดับอยูนั้น ถา ทรัพยากร
ถูกแกไขจากโคดหรือโปรแกรม อื่นที่ทํางาน
ในขณะเดียวกันจะอาจทําใหทํางานผิดพลา
ดได ถาโคดสวน A ไมไดคํานึงถึงปญหานี้ไว
Race Condition คือ?
งงแพบ
Race Condition คือ?
ตัวอยาง: ถอนเงินในบัญชี
สมศรี สมชาย
เงินเดือน เดือนนี้ออกแลวว
เอามาฝากที่เคากอน เดี๋ยว
โอนใหใชวันละ 50 บาทนะ #หะ
ถาใชแลวเหลือกลับ
บานมาหยอดกระปุก
ดวยนะ
ตัวอยาง: ถอนเงินในบัญชี
สมศรี
โอนเงินแพบ
เงินคงเหลือ
ในบัญชีสมศรี
15,000 บาท
14,950 บาท
เงินคงเหลือ
ในบัญชีสมชาย
0 บาท
50 บาท
ตัวอยาง: ถอนเงินในบัญชี
สมศรี
โอนเงินแพบ
เงินคงเหลือ
ในบัญชีสมศรี
15,000 บาท
14,950 บาท
เงินคงเหลือ
ในบัญชีสมชาย
0 บาท
50 บาท
Timing
Window
Code Sequence == การโอนเงิน
1. ตองถอนจากบัญชีสมศรี
2. แลวโอนเขาบัญชีสมชาย
Shared Resource == เงินในระบบ
ตัวอยาง: ถอนเงินในบัญชี
เงินคงเหลือ
ในบัญชีสมชาย
Total: 50 บาท
สมชาย
50 บาท...ใชไงใหพอเนี่ย
เรียนสอนแฮกเว็บแบบแมว ๆ
มาแลว ลองหนอยดีกวา..
สิ่งที่เกิดขึ้นตอนถอนเงิน?
ตัวอยาง: ถอนเงินในบัญชี
สิ่งที่คนกดเงินคิด
ฉันมีเงินในบัญชี 50 บาท
ฉันนําออกมาใช 50 บาท
ฉันเหลือเงิน 0 บาทในบัญชี
ตัวอยาง: ถอนเงินในบัญชี
สิ่งที่โปรแกรมเมอรคิด
var เงินที่จะถอน = 50;
var เงินในบัญชี = 50;
if (เงินในบัญชี >= เงินที่จะถอน)
f_ถอนเงิน(50){
t_ลบเงินในบัญชี(50);
t_เงินออกจากตู(50);
}
} Thread 1, 2 ทําพรอมกัน
ตัวอยาง: ถอนเงินในบัญชี
สิ่งที่แฮกเกอรคิด
var เงินที่จะถอน = 50;
var เงินในบัญชี = 50;
if (เงินในบัญชี >= เงินที่จะถอน)
f_ถอนเงิน(50){
t_ลบเงินในบัญชี(50);
t_เงินออกจากตู(50);
}
}
ใชเวลา 3 วินาที
วิ 1
วิ 2
วิ 3
Thread 1, 2 ทําพรอมกัน
ตัวอยาง: ถอนเงินในบัญชี
สิ่งที่แฮกเกอรคิด
var เงินที่จะถอน = 50;
var เงินในบัญชี = 50;
if (เงินในบัญชี >= เงินที่จะถอน)
f_ถอนเงิน(50){
t_ลบเงินในบัญชี(50);
t_เงินออกจากตู(50);
}
}
วิ 1
วิ 2
วิ 3
จะเกิดอะไรขึ้น
ถาวินาทีที่ 2
ถอนเงินอีกตู
จากบัญชีเดียว
กันพรอม ๆ
กัน?
ตัวอยาง: ถอนเงินในบัญชี
สิ่งที่แฮกเกอรคิด
var เงินที่จะถอน = 50;
var เงินในบัญชี = 50;
if (เงินในบัญชี >= เงินที่จะถอน)
f_ถอนเงิน(50){
t_ลบเงินในบัญชี(50);
t_เงินออกจากตู(50);
}
}
var เงินที่จะถอน = 50;
var เงินในบัญชี = 50;
if (เงินในบัญชี >= เงินที่จะถอน)
f_ถอนเงิน(50){
t_ลบเงินในบัญชี(50);
t_เงินออกจากตู(50);
}
}
var เงินที่จะถอน = 50;
var เงินในบัญชี = 50;
if (เงินในบัญชี >= เงินที่จะถอน)
f_ถอนเงิน(50){
t_ลบเงินในบัญชี(50);
t_เงินออกจากตู(50);
}
}
วินาทีที่ 1
ถอนเงินตู 1
วินาทีที่ 2
ถอนเงินตู 2
วินาทีที่ 2
ถอนเงินตู 3
ตัวอยาง: ถอนเงินในบัญชี
สิ่งที่แฮกเกอรคิด
วินาทีที่ 1
ถอนเงินตู 1
โจร 1 ไดเงิน
50 บาท
วินาทีที่ 2
ถอนเงินตู 2
โจร 2 ไดเงิน
50 บาท
วินาทีที่ 2
ถอนเงินตู 3
โจร 3 ไดเงิน
50 บาท
ตัวอยาง: ถอนเงินในบัญชี
สิ่งที่แฮกเกอรคิด
มีเงินในบัญชี
50 บาท
ถอน 3
ครั้งพรอม ๆ
กันไดเงิน 150
บาท!!!
ตัวอยาง: ถอนเงินในบัญชี
ที่มา: http://thehackernews.
com/2012/10/1-million-dollar-hacked-
in-60-seconds.html, http://www.fbi.
gov/sandiego/press-
releases/2012/fourteen-charged-in-
million-dollar-gone-in-60-seconds-
bank-fraud
ตัวอยาง: ถอนเงินในบัญชี
ที่มา: http://thehackernews.com/2012/10/1-million-dollar-hacked-in-60-seconds.html, http://www.fbi.
gov/sandiego/press-releases/2012/fourteen-charged-in-million-dollar-gone-in-60-seconds-bank-
fraud
ใชเวลา 60 วินาที กวาระบบธนาคาร
จะอัพเดทวาเงินถูกถอนเงินไปแลว
Race Condition กรณีอื่น ๆ ?
C, C++Privilege Escalation
VMware Local Privilege Escalation
using Race Condition (CVE-2010-4295)
VMware Local Privilege Escalation
using Race Condition (CVE-2010-4295)
User Root User LongCat
ใช vmware-mount
ทํางาน !@#$%^&(
บายโมง 10 นาที 20 วินาที
=> สราง /tmp/vmxxx.sh
=> ใสโคด
=> รันดวยสิทธิ์ root
=> ลบไฟลออก
=> จบการทํางาน
Server:
Company A
VMware Local Privilege Escalation
using Race Condition (CVE-2010-4295)
User Root User LongCat
ใช vmware-mount
ทํางาน !@#$%^&(
บายโมง 10 นาที 20 วินาที
=> สราง /tmp/vmxxx.sh
=> ใสโคด
=> รันดวยสิทธิ์ root
=> ลบไฟลออก
=> จบการทํางาน
Server:
Company A
บายโมง 10 นาที 19 วินาที
เขียนสคริปทวนลูป ใสโคด
“sudo usermod -aG
sudo longcat”
เขาไปในไฟล /tmp/vmxxx.
sh รัว ๆ!! อิอิกํา
กลับมาดูที่ฝงเว็บ!
โฆษณาคั่น: https://www.facebook.com/longhackz
ที่มา: Josip Franjković
http://josipfranjkovic.blogspot.com/2015/04/race-conditions-on-facebook.html
ชองโหว Race Condition ใน Facebook
ระบบรีวิวของ
แฟนเพจ
ที่มา: Josip Franjković
http://josipfranjkovic.blogspot.com/2015/04/race-conditions-on-facebook.html
ชองโหว Race Condition ใน Facebook
เฟซบุกจายคาหาชองโหวเจอให
3000 USD (1 แสนกวาบาท)
ที่มา: Josip Franjković
http://josipfranjkovic.blogspot.com/2015/04/race-conditions-on-facebook.html
ชองโหว Race Condition ใน Facebook
เปลี่ยนชื่อ
ชองโหว Race Condition
ในเว็บ Digital Ocean
ที่มา: Josip Franjković
http://josipfranjkovic.blogspot.com/2015/04/race-conditions-on-facebook.html
ชองโหว Race Condition
ในเว็บ Digital Ocean
ที่มา: Josip Franjković
http://josipfranjkovic.blogspot.com/2015/04/race-conditions-on-facebook.html
ใช Promo Code 1 อัน แลวยิงเขาไปพรอมกันในเสี้ยววินาทีเดียวเปนสิบ ๆ
thread เพื่อเติม Promo Code
ในระบบทําใหจากเดิมกดไดครั้งเดียวเปนหลายครั้ง ปมเงิน!
ดรามา Race Condition ในระบบ
StarBucks Gift Card
ที่มา: Egor Homakov
http://sakurity.com/blog/2015/05/21/starbucks.html, http://arstechnica.
com/security/2015/05/researcher-who-exploits-bug-in-starbucks-gift-
cards-gets-rebuke-not-love/
ดรามา Race Condition ในระบบ
StarBucks Gift Card
ที่มา: Egor Homakov
http://sakurity.com/blog/2015/05/21/starbucks.html, http://arstechnica.com/security/2015/05/researcher-
who-exploits-bug-in-starbucks-gift-cards-gets-rebuke-not-love/
★ Ghost in the ShellCode 2015
★ Name: aart
★ Category: Web
★ Points: 200
LongCat Voting System
ที่มา: http://ghostintheshellcode.com/
LongCat Voting System
★ สมัคร User Account ได
★ ล็อคอินได
(แตบอกไมใชแอดมิน)
★ สงลิ้งรูปกับชื่อรูปมาที่หนาแ
รกได
★ หนาแรกไมจํากัดรูปที่ถูกสง
มา (ตอนหลังจํากัดเปน
1000 แลวก็ 100
รูปลาสุดแทนเพราะคนเลนเ
ยอะ)
★ แตละรูปสามารถโหวตคะแน
นขึ้นหรือลงได
LongCat Voting System
LongCat Voting System
LongCat Voting System
LongCat Voting System
Recap: VMware Race Condition
User Root User LongCat
ใช vmware-mount
ทํางาน !@#$%^&(
บายโมง 10 นาที 20 วินาที
=> สราง /tmp/vmxxx.sh
=> ใสโคด
=> รันดวยสิทธิ์ root
=> ลบไฟลออก
=> จบการทํางาน
Server:
Company A
บายโมง 10 นาที 19 วินาที
เขียนสคริปทวนลูป ใสโคด
“sudo usermod -aG
sudo longcat”
เขาไปในไฟล /tmp/vmxxx.
sh รัว ๆ!! อิอิกํา
LongCat Voting System
LongCat Voting System
[1.01]
สมัคร!
[1.011]
ล็อคอิน!
[1.03]
ใสสิทธิ์
user
ธรรมดา
ล็อคอินตอนที่
ขั้นตอนสมัครแคใส
user/pass
เขาไปในฐานขอมูล
user
แตยังไมไดใสสิทธิ์เ
ปน user ธรรมดา!
[1.02]
LongCat Voting System
flag{rac4c0nd1t1on}
Write-up จาก
https://kitctf.de/writeups/gits2015/aart/
Pwner !!
Pwner !!
LongCat Voting System
Down !!
ปองกัน Race Condition?
★ Atomicity
○ Transaction
○ Locks
○ Roll-back
○ Double-Check

Exploiting WebApp Race Condition Vulnerability 101