Security/Forensic

[CTF] HackTM - USB ํŒจํ‚ท ๋ถ„์„

๐Ÿ”ฎ Bailey 2020. 2. 4. 22:58

HackTM์˜ ๋ฌธ์ œ๋ฅผ ์ ‘ํ•˜๊ฒŒ ๋˜์–ด ๋„คํŠธ์›Œํฌ ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ดค๋‹ค

 

pcapng ํŒŒ์ผ์„ ๋ฐ›์•„์„œ ์—ด์–ด๋ณด๋‹ˆ ํ”„๋กœํ† ์ฝœ์ด USB์ธ ํŒŒ์ผ์ด๋‹ค

 

 

 

USB ํŒจํ‚ท ํŒŒ์ผ ๋ถ„์„์€ ์ฒ˜์Œ ํ•ด๋ณด๋Š” ๊ฑฐ๋ผ ์‚ด์ง ๋‹นํ™ฉ์Šค๋Ÿฌ์› ์ง€๋งŒ ์šฐ์„  ์•„๋Š” ๊ฑธ ๋‹ค ๋‚˜์—ดํ•ด๋ณธ๋‹ค

 

USB(Universial Serial Bus) ๋Š” ๊ฐ๊ฐ ๋””๋ฐ”์ด์Šค๋“ค๋ผ๋ฆฌ ์ง์ ‘ ์†Œํ†ต์„ ํ•  ์ˆ˜ ์—†๋‹ค

๊ทธ๋ž˜์„œ ํด๋ผ์ด์–ธํŠธ ๋“œ๋ผ์ด๋ฒ„๋Š” ํ†ต์‹ ์„ ์ฃผ๊ณ  ๋ฐ›๊ธฐ ์œ„ํ•ด URB(USB request block)์„ ์‚ฌ์šฉํ•œ๋‹ค

URB ๋Š” ์š”์ฒญ๊ณผ ํ•ด๋‹น ๋‚ด์šฉ์— ๊ด€ํ•œ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ๊ตฌ์กฐ์ฒด ํ˜•์‹์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค

USB ํŒจํ‚ท ํ•„๋“œ๋Š” Sync Field, Packet Identifier Field, Address Field, Endpoint Field, Data Field๋กœ ๊ตฌ์„ฑ๋œ๋‹ค

 

=> ๋‚ด์šฉ์„ ์ฃผ๊ณ  ๋ฐ›์Œ์— ์žˆ์–ด URB๋ฅผ ์‚ฌ์šฉํ–ˆ์„ ๊ฒƒ์ด๊ณ  ๋ฐ์ดํ„ฐ ํ•„๋“œ์— ์œ ์˜๋ฏธํ•œ ๊ฐ’์ด ์žˆ์„ ๊ฒƒ์ด๋‹ค (๊ฐ€์„ค)

 

USB์— ๋Œ€ํ•ด ๋” ๊นŠ๊ฒŒ ๊ณต๋ถ€ํ•ด๋ณด๋ฉด ์ข‹๊ฒ ์ง€๋งŒ

์šฐ์„  ์‹œ๊ฐ„์ด ์—†์œผ๋‹ˆ ์ด ์ •๋„๋กœ ์ถ”์ธก์„ ๋๋‚ด๊ณ  ๊ฐ€์„ค์„ ํ™•์ธํ•ด๋ณธ๋‹ค

 

 

๋‹ค์‹œ wireshark ๋กœ ๋Œ์•„๊ฐ€์„œ usb.capdata์„ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•œ ์นผ๋Ÿผ์„ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค

์นผ๋Ÿผ ์ด๋ฆ„์€ Leftover Capture Data ๋กœ ์ง€์–ด์ฃผ๊ณ  ํƒ€์ž…์€ custom์œผ๋กœ ํ•ด๋‘” ํ›„ ๋น„๊ณ ๋ž€์— usb.capdata๋ฅผ ์ž…๋ ฅํ•œ๋‹ค

 

 

๋šœ๋‘”!

GET STATUS Response ๊ฐ€ ์ง„ํ–‰๋œ ํ›„์— URB_INTERRUPT in ํ•ญ๋ชฉ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ดํŽด๋ณด๋ฉด 

hexํ˜•์œผ๋กœ ์ถ”์ธก๋˜๋Š” ๋ฐ์ดํ„ฐ๋“ค์ด ๋ณด์ธ๋‹ค

 

๊ทธ๋ ‡๋‹ค๋ฉด tshark ๋ฅผ ํ†ตํ•ด ์šฐ์„  ์ˆ˜์ƒํ•œ ๊ฐ’์„ ๋ชจ๋‘ ์ถ”์ถœํ•œ๋‹ค

 

 

์ƒ๋‹จ์— ์œ„์น˜ํ•œ ๊ฐ’ ์ผ๋ถ€๋Š” ์ง€์›Œ์ฃผ๊ณ  (wireshark์—์„œ ํ™•์ธํ•œ ํ”„๋กœํ† ์ฝœ ๋ฐฐ์น˜๋ฅผ ๋ดค์„๋•Œ ์˜๋ฏธ ์—†์„ ๊ฒƒ์œผ๋กœ ์ƒ๊ฐ๋จ)

00:00:00:00:00:00:00:00 ๋„ ์ „๋ถ€ ์ง€์›Œ์ค€๋‹ค

 

 

ํ–‰๋ณ„๋กœ ์‚ดํŽด๋ณด๋‹ˆ 1, 3๋ฒˆ์งธ ํ•„๋“œ์—๋งŒ ์œ ์˜๋ฏธํ•œ ๊ฐ’์ด ์žˆ๋‹ค

๋‚˜๋จธ์ง€ 00 ๊ฐ’๋“ค์€ ์žˆ์–ด๋ดค์ž ์‹œ์•ผ๋งŒ ์‚ฐ๋งŒํ•˜๋ฏ€๋กœ ๋˜๋‹ค์‹œ ์ง€์›Œ์ค€๋‹ค

 

 

๊น”๋”ํ•˜๊ฒŒ ์ถ”์ถœ๋œ ๊ฐ’์„ ์‚ดํŽด๋ณด๋ฉด field 1์€ 00, 02, 20 ์œผ๋กœ ๊ตฌ์„ฑ๋˜๊ณ  field 2๋Š” ์ƒ๊น€์ƒˆ๊ฐ€ hex ์ฒ˜๋Ÿผ ๋ณด์ธ๋‹ค

๊ทธ๋ ‡๋‹ค๋ฉด ๊ฐ ํ•„๋“œ๊ฐ€ ์˜๋ฏธํ•˜๋Š” ๊ฒƒ์ด ๋ฌด์—‡์ผ์ง€ ์ฐพ์•„์•ผ ํ•˜๋Š”๋ฐ hex ๋กœ ํ‘œํ˜„๋  ๋ฐ์ดํ„ฐ๊ฐ€ ์–ด๋–ค๊ฒŒ ์žˆ์„๊นŒ

 

์•ž์„œ ์‚ดํŽด๋ดค๋“ฏ ์บก์ณ๋œ ๋ฐ์ดํ„ฐ๋“ค์€ ์ธํ„ฐ๋ŸฝํŠธ์— ์˜ํ•ด ๋“ค์–ด์˜จ ๊ฒƒ์ด์—ˆ๋‹ค

์ฆ‰, IO ์ธํ„ฐ๋ŸฝํŠธ ๊ธฐ๋ฐ˜ ์ž…์ถœ๋ ฅ์ด ์ง„ํ–‰๋˜์—ˆ์Œ์„ ์œ ์ถ”ํ•ด ๋ณผ ์ˆ˜ ์žˆ๋‹ค

์šด์˜์ฒด์ œ ์ž…์ถœ๋ ฅ ๋ฐฉ๋ฒ• 4๊ฐ€์ง€ ์ค‘ ํ•˜๋‚˜์ธ ์ธํ„ฐ๋ŸฝํŠธ ๊ธฐ๋ฐ˜ ์ž…์ถœ๋ ฅ์€ ๋Œ€๋ถ€๋ถ„ ํ‚ค๋ณด๋“œ ํ‘œ์ค€ ์ž…๋ ฅ ์‹œ ์ด๋ฃจ์–ด์ง„๋‹ค

๋”ฐ๋ผ์„œ ํ‚ค๋ณด๋“œ ๊ฐ’์ด ๋ฒ„์Šค๋ฅผ ํ†ต๊ณผํ•  ๋•Œ ์–ด๋–ค ํ˜•ํƒœ๋กœ ์ „์†ก๋˜๋Š”์ง€ ์ฐพ์•„๋ณด์•˜๋‹ค

 

 

ํ‘œ์ค€ ๋ฌธ์„œ๋ฅผ ๋ณด๊ณ  HID ๊ฐ’๊ณผ Key ๊ฐ’์„ ๋งคํ•‘ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค

(์ฐธ๊ณ ๋ฌธ์„œ: Universal Serial Bus HID Usage Tables)

์—„์ฒญ ๋งŽ์€๋ฐ ์ˆซ์ž์™€ ์•ŒํŒŒ๋ฒณ ์ •๋„๋งŒ ํ•ด์ค˜๋„ ๋  ๋“ฏ ํ•˜๋‹ค

 

( github์—์„œ ์ž˜ ์ฐพ์•„๋ณด๋ฉด ์ฐพ์„ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค )

 

๋‘๋ฒˆ์งธ ํ•„๋“œ๋ฅผ ๋„ฃ๊ณ  ๋Œ๋ฆฌ๋ฉด 7VGJ4SSL9NHVUK0D6D3F๋กœ ๋ณ€ํ™˜๋œ๋‹ค

์ฒซ๋ฒˆ์งธ ํ•„๋“œ(00, 02, 20)๊ฐ€ ๊ฐ–๋Š” ์˜๋ฏธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค

 

Beyond BIOS: Developing with the Unified Extensible Firmware Interface 

 

02๋Š” ์™ผ์ชฝ shift๊ฐ€ ๋ˆŒ๋ ธ์„ ๋•Œ, 20๋Š” ์™ผ์ชฝ alt๊ฐ€ ๋ˆŒ๋ ธ์„ ๋•Œ์ด๋‹ค

(๊ทธ๋Ÿฌ๋‚˜ ๋ฌธ์ œ์—์„œ๋Š” 20์ด ์˜ค๋ฅธ์ชฝ shift ๋ฅผ ๋ˆ„๋ฅธ ๊ฒƒ์ฒ˜๋Ÿผ ๋™์ž‘ํ•˜๊ณ  ์žˆ์—ˆ๋‹ค

๊ณผ๊ฑฐ ๋‹ค๋ฅธ CTF์— ๋น„์Šทํ•œ ์œ ํ˜•์˜ ๋ฌธ์ œ๊ฐ€ ์ถœ์ œ๋œ ์ ์ด ์žˆ๋Š”๋ฐ ํ•ด๋‹น ๋ฌธ์ œ์˜ write up์—์„œ 20์ด ์˜ค๋ฅธ์ชฝ shift๋ผ๊ณ  ๋งํ•œ๋‹ค

๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ๊ณต์‹์ ์ธ reference๋ฅผ ์•„์ง ๋ชป ์ฐพ์•˜๋‹ค ํ–ฅํ›„ ๋” ๊ฒ€์ƒ‰ ํ•„์š”)

์ด๋ฅผ ๋ฐ˜์˜ํ•˜๋ฉด ์ตœ์ข…์ ์œผ๋กœ ๋ฌธ์ž์—ด์€ 7vgj4SSL9NHVuK0D6d3F์ด ๋œ๋‹ค

 

 

๋‹ค์‹œ wireshark ๋กœ ๋Œ์•„๊ฐ€ ์ˆจ๊ฒจ์ง„ ํŒŒ์ผ์„ ์ฐพ๋‹ค๋ณด๋‹ˆ pk ์‹œ๊ทธ๋‹ˆ์ฒ˜๊ฐ€ ๋ฐœ๊ฒฌ๋œ๋‹ค

ํ•ด๋‹น ๋ถ€๋ถ„์„ ๋ณต์‚ฌํ•˜์—ฌ zip ํŒŒ์ผ๋กœ ์นด๋น™ํ•ด์ค€๋‹ค

 

 

 

์•„๋‹ˆ๋‚˜ ๋‹ค๋ฅผ๊นŒ ์•Œ์ง‘์—๋Š” ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ๊ฑธ๋ ค ์žˆ๋‹ค

์œ„์—์„œ ๋ฐœ๊ฒฌํ•œ ๋ฌธ์ž์—ด์„ ์ž…๋ ฅํ•ด์ค€๋‹ค

 

 

์••์ถ•์„ ํ’€์–ด์„œ ์—ด์–ด๋ณธ ํ…์ŠคํŠธ ํŒŒ์ผ์— flag๊ฐ€ ์จ์ ธ์žˆ๋‹ค!

 

๋