43
Race Condition 101 ชองโหวที่แขงกับเวลาและเงื่อนไข Copyright © 2015 by Pichaya Morimoto. แจกจายหรือนําไปใชไดเต็มที่ไมตองขอแคลงเครดิตไวก็พอ Mr. Pichaya Morimoto June 5, 2015

Exploiting WebApp Race Condition Vulnerability 101

Embed Size (px)

Citation preview

Race Condition 101ชองโหวที่แขงกับเวลาและเงื่อนไข

Copyright © 2015 by Pichaya Morimoto. แจกจายหรือนําไปใชไดเต็มที่ไมตองขอแคลงเครดิตไวก็พอ

Mr. Pichaya MorimotoJune 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

ใชเวลา 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 Homakovhttp://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