Archive for Dev. (junyup2)

์ง€์‹์„ ์ฑ„์›Œ๊ฐ€๋Š” ใ€Ž๊ฐœ๋ฐœ์ž/ํ™”์ดํŠธํ•ด์ปคใ€๋ฅผ ๋ชฉํ‘œ๋กœ ์ •๋ฆฌํ•˜๋Š” ๋ธ”๋กœ๊ทธ

๋ชจ์˜ ํ•ดํ‚น ์Šคํ„ฐ๋””/๋ชจ์˜ ํ•ดํ‚น - ๊ธฐ๋ก์ผ์ง€

[๊ธฐ๋ก์ผ์ง€] ๐Ÿ“š 13์ฃผ์ฐจ (CSRF ๋Œ€์‘ / ์šฐํšŒ)

Gearvirus(junyup2) 2024. 1. 31. 23:12

CSRF ๋Œ€์‘ ๋ฐ ์šฐํšŒ

CSRF๋Š” ํ”ผํ•ด์ž๊ฐ€ ์„œ๋ฒ„๋กœ ์ž„์˜์˜(๊ณต๊ฒฉ์ž๊ฐ€ ์›ํ•˜๋Š”) ์š”์ฒญ์„ ๋ณด๋‚ด๊ฒŒ ๋งŒ๋“œ๋Š” ๊ณต๊ฒฉ์ด๋‹ค.

CSRF ๊ณต๊ฒฉ์˜ ์ ˆ์ฐจ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

CSRF ๊ณต๊ฒฉ ์ ˆ์ฐจ

1. ์ค‘์š”ํ•œ ์š”์ฒญ ์‹๋ณ„

(์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐ๋˜๋Š” ์š”์ฒญ์„ ์‹๋ณ„ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.)

 

2. ๊ทธ ์š”์ฒญ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”์ง€ ์ฒดํฌ

(์ธ์ฆ ์ •๋ณด๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ , ์—†๋‹ค๋ฉด CSRF ์ทจ์•ฝ์ ์œผ๋กœ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.)

 

3. GET Method ์ฒดํฌ

(POST Method๋ผ๋ฉด GET Method๋กœ ๋ฐ”๊ฟ”์„œ ๋ณด๋‚ด๋ณด๊ณ  ๋˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.)

POST Method๋กœ๋งŒ ์ฒ˜๋ฆฌ๋˜๋„๋ก ๊ตฌํ˜„ ํ•œ๋‹ค๊ณ  ๋ฐฉ์–ด๋˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.

 

๋Œ€์‘ - POST Method

4. CSRF ๊ณต๊ฒฉ(with POST Method)

> XSS ์ทจ์•ฝ์ ์ด ์žˆ๋Š”์ง€ ํ™•์ธ
> POST Form Tag๋ฅผ ํ™œ์šฉ

์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต๊ฒฉ์ž๊ฐ€ ๋ฏธ๋ฆฌ ์„ธํŒ…ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด ์œ„ํ—˜ํ•œ ๊ฒƒ์ด๋‹ค. ์ฆ‰ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ด๋ฏธ ์•Œ๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์ธ๋ฐ ์ด์— ๋Œ€ํ•˜์—ฌ ๋Œ€์‘ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ† ํฐ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋Œ€์‘ - CSRF Token

๊ณต๊ฒฉ์ž๊ฐ€ ๋ฏธ๋ฆฌ ์„ธํŒ…ํ•  ์ˆ˜ ์—†๋Š” ๊ฐ’์„ ์ถ”๊ฐ€ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

ํ† ํฐ์€ ํ•ด๋‹น ํŽ˜์ด์ง€์— ์ ‘์† ํ•ด์•ผ๋งŒ ์ƒ์„ฑ๋˜๋Š” ๋žœ๋คํ•œ ๊ฐ’์œผ๋กœ์„œ ์œ„์กฐํ•  ์ˆ˜ ์—†๋Š” ๊ฐ’์ด ๋œ๋‹ค.

1. <hidden> - random ๊ฐ’ ์ƒ์„ฑ
2. DB or Session์— ์ €์žฅ
3. ํ•ด๋‹น ํŽ˜์ด์ง€์— ์ ‘์†ํ•  ๋•Œ๋งˆ๋‹ค ๋„ฃ์–ด์„œ ๋ณด๋‚ด์คŒ.

 

5. CSRF ๊ณต๊ฒฉ (Bypass CSRF Token)

๋‹ค๋งŒ ํ•ด๋‹น ๊ณต๊ฒฉ์€ XSS ์ทจ์•ฝ์ ์ด ์กด์žฌํ•ด์•ผ๋งŒ ์šฐํšŒ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

XSS
> iframe

 

๋Œ€์‘ - Referer

referer ํ—ค๋”(header)๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

referer ํ—ค๋”๋Š” '์ด ์š”์ฒญ์ด ์–ด๋Š ํŽ˜์ด์ง€์—์„œ ์š”์ฒญํ•œ ๊ฒƒ์ธ๊ฐ€?' ๋ฅผ ํ™•์ธํ•˜๋Š” ๊ฒƒ์œผ๋กœ์„œ, ํŠน์ • ํŽ˜์ด์ง€์—์„œ ์˜จ ์š”์ฒญ๋งŒ ๋ฐ›๊ฒ ๋‹ค! ๋ผ๊ณ  ์„ ์–ธํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

ํ•ด๋‹น ๋Œ€์‘์— ๋Œ€ํ•œ ์šฐํšŒ ๋ฐฉ๋ฒ•์€? ์—†๋‹ค!

Referer๋ฅผ ์ œ.๋Œ€.๋กœ ์ฒดํฌํ–ˆ์„ ๋•Œ ์šฐํšŒ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅ ํ•˜๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

ํ•˜์ง€๋งŒ referer๋ฅผ ์ œ๋Œ€๋กœ ์ฒดํฌํ•˜๋Š” ๊ฒƒ์€ ์‰ฝ์ง€๊ฐ€ ์•Š๋‹ค.


์ž˜๋ชป๋œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

๋งŒ์•ฝ์— ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋ฉด? ์šฐ๋ฆฌ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•  ๊ฒƒ์ธ๊ฐ€์— ๋Œ€ํ•˜์—ฌ ์ƒ๊ฐํ•ด ๋ณด์•„์•ผํ•œ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ๋Š” try catch๋ฅผ ์ด์šฉํ•˜์—ฌ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒ ํ–ˆ์„๋•Œ ์–ด๋–ค์‹์œผ๋กœ ์ฒ˜๋ฆฌํ• ์ง€ ๊ฒฐ์ •ํ•˜๊ฒŒ ๋œ๋‹ค.

์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•

์„œ๋น„์Šค๋ฅผ ์ค‘๋‹จํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ vs ๋ˆˆ ๊ฐ์•„์ฃผ๋Š” ๋ฐฉ๋ฒ•

์ผ๋ฐ˜์ ์œผ๋กœ ์ƒ๊ฐํ•˜๋ฉด ๋‹น์—ฐํžˆ ์„œ๋น„์Šค๋ฅผ ์ค‘๋‹จํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๋งž๋‹ค๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค. (๋ณด์•ˆ์ƒ) ํ•˜์ง€๋งŒ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์กฑ์กฑ ์„œ๋น„์Šค๋ฅผ ์ค‘๋‹จํ•œ๋‹ค๋Š” ๊ฒƒ์€ ๋ฌด๋ฆฌ๊ฐ€ ์žˆ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด ์ฝ”๋“œ๋ฅผ ๊ณ ์น˜๋ฉด๋˜๋Š”๊ฒŒ ์•„๋‹๊นŒ? ๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ฝ”๋“œ๋ฅผ ์ž˜๋ชป ๋งŒ์ง€๋ฉด ๋‹ค๋ฅธ ๊ณณ์—์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๋‚ด๊ฐ€ ์ง€๊ธˆ ์ž‘์„ฑํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์„œ๋ฒ„์— ์–ด๋–ค ์˜ํ–ฅ์„ ๋ผ์น ์ง€ ๋ชจ๋ฅด๊ธฐ ๋•Œ๋ฌธ์ธ๋ฐ ์ด ์ด์œ ๋Š” ํ•œ ์‚ฌ๋žŒ์ด ๋ชจ๋“  ์ฝ”๋“œ๋ฅผ ๋‹ค ์งœ๋Š”๊ฒƒ์ด ์•„๋‹ˆ๊ณ , ์—ฌ๋Ÿฌ ์‚ฌ๋žŒ์ด ์ˆ˜์ • ๋ณด์™„ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋˜ํ•œ ์ตœ์ดˆ ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ณ„์†ํ•ด์„œ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ณ  ์œ ์ง€๋ณด์ˆ˜๋Š” ๋”ฐ๋กœ์ด ์ง„ํ–‰๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— ์‹œ์Šคํ…œ์„ ์ „๋ถ€ ํŒŒ์•…ํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅ์— ๊ฐ€๊น๊ณ , ์—๋Ÿฌ ๋ฐœ์ƒ ์‹œ ๋ชจ๋“  ๊ฒƒ์„ ๋ง‰์•„ ๋ฒ„๋ฆฌ๋ฉด ๋‹ค๋ฅธ ๊ณณ์—์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋น„์Šค๋ฅผ ์ค‘๋‹จํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ณ  ๋ˆˆ๊ฐ์•„ ์ฃผ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

์œ„์™€ ๊ฐ™์€ ์ด์œ ๋ฅผ ์ƒ๊ฐํ•˜๋ฉฐ ์•„๋ž˜๋ฅผ ์‚ดํŽด๋ณด์ž.

ex)  ๋น„๋ฐ€ ๋ฒˆํ˜ธ ๋ณ€๊ฒฝ(feat. CSRF Token)

1. ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋Š” ๋งˆ์ดํŽ˜์ด์ง€์—๋งŒ CSRF ํ† ํฐ์„ ๋งŒ๋“ค์–ด์ฃผ์—ˆ๋‹ค.
2. ๊ทธ๋Ÿฐ๋ฐ ์•Œ๊ณ  ๋ณด๋‹ˆ ๊ฐœ์ธ ์‹œํฌ๋ฆฟ ํŽ˜์ด์ง€์—์„œ๋„ ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณ€๊ฒฝ ๊ธฐ๋Šฅ์ด ์ง€์›๋˜๊ณ  ์žˆ์—ˆ๋‹ค.
(๋น„๋ฐ€ ๋ฒˆํ˜ธ ๋ณ€๊ฒฝ ์š”์ฒญ์ด CSRF Token ์„ค์ •์„ ํ•œ ํŽ˜์ด์ง€ ์ด์™ธ์—์„œ๋„ ๊ฐ€๋Šฅํ–ˆ๋˜ ๊ฒฝ์šฐ)

change_pass.php ๋ผ๋Š” ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ณผ์ •์—์„œ CSRF Token์„ ๊ฒ€์‚ฌํ•œ๋‹ค๋ฉด?

CSRF Token์„ ์„ค์ •ํ•ด๋‘” ํŽ˜์ด์ง€์—์„œ๋Š” ๋ณ€๊ฒฝ ์š”์ฒญ์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ๊ธฐ์กด์— ๋ณ€๊ฒฝ ๊ธฐ๋Šฅ์ด ์ง€์›๋˜์—ˆ๋˜ ๊ณณ์ธ๋ฐ ๋ฏธ์ฒ˜ ํ™•์ธํ•˜์ง€ ๋ชปํ•˜๊ณ  CSRF Token์ด ๋ˆ„๋ฝ๋œ ๊ณณ์ด ์žˆ๋‹ค๋ฉด? ํ•ด๋‹น ํŽ˜์ด์ง€์—์„œ ๋ณด๋‚ด๋Š” ๋ณ€๊ฒฝ ์š”์ฒญ์€ ๋ถˆ๊ฐ€๋Šฅํ•ด์ง„๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

๊ทธ๋ž˜์„œ ๋งŽ์€ ๊ฐœ๋ฐœ์ž๋“ค์ด '๋ˆˆ๊ฐ์•„ ์ฃผ๊ธฐ'๋ฅผ ์„ ํƒํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

 

Bypass CSRF Token (feat. ๋ˆˆ๊ฐ์•„์ฃผ๊ธฐ)

csrf_token ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์—†์œผ๋ฉด? csrf ํ† ํฐ์„ ๊ฒ€์‚ฌํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋ผ๋Š” ๋ฐฉ์‹์„ ์ทจํ•˜๋Š” ๊ฒฝ์šฐ๋„ ํ—ˆ๋‹คํ•˜๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

์ฆ‰ ํŒŒ์•…ํ•˜์ง€ ๋ชปํ•œ ๋‹ค๋ฅธ ์š”์ฒญ์— ์˜ํ–ฅ์„ ์ค„๊นŒ๋ด , ๋นก์„ธ๊ฒŒ ์žก์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

๊ทธ๋ž˜์„œ csrf token์ด ์กด์žฌํ•˜๋”๋ผ๋„ ํ•ด๋‹น ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋นผ๊ณ  ์š”์ฒญ์„ ํ•ด๋ณด๋ฉด๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์ธ์ง€ํ•˜์ž!

Referer ๋˜ํ•œ ๋งˆ์ฐฌ๊ฐ€์ง€์ด๋‹ค.

 

CSRF ๊ณต๊ฒฉ (Bypass Referer, feat ๋ˆˆ๊ฐ์•„์ฃผ๊ธฐ)

๊ทธ๋ž˜์„œ referer๋ฅผ ์—†์• ๊ณ  ๋ณด๋‚ด๋Š” ๊ฒฝ์šฐ์— ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์ธ์ง€ํ•˜์ž.

<meta name="referrer" content="no-referrer">

์œ„์˜ ๋ฉ”ํƒ€ ํƒœ๊ทธ๋ฅผ ์ด์šฉํ•˜๋ฉด referer๋ฅผ ์ง€์šฐ๊ณ  ๋ณด๋‚ผ ์ˆ˜  ์žˆ๊ณ , ์ด ๋ฐฉ์‹์œผ๋กœ ์šฐํšŒ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์œผ๋กœ๋„ ์šฐํšŒ๊ฐ€ ๋˜์ง€ ์•Š๋Š”๋‹ค๋ฉด referer๊ฐ€ ์ œ๋Œ€๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๊ณ , ๊ทธ๋ ‡๋‹ค๋ฉด ์šฐํšŒ๋˜์ง€ ์•Š๋Š” ๊ฒƒ์ด๋‹ค.


๊ทผ๋ณธ์ ์ธ ๋Œ€์‘ ๋ฐฉ๋ฒ•

'Referer Check' ๊ฐ€์žฅ ํ™•์‹คํ•œ ๋ฐฉ๋ฒ•์€ referer ์ฒดํฌ๋ฅผ ์ œ.๋Œ€.๋กœ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

ํ•˜์ง€๋งŒ CSRF ์ทจ์•ฝ์ ์ด ๋ฐœ์ƒํ•˜๋Š” ๊ทผ๋ณธ์ ์ธ ์›์ธ์„ ์ƒ๊ฐํ•ด๋ณด๋ฉด ์š”์ฒญ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ฏธ๋ฆฌ ์„ธํŒ…ํ•  ์ˆ˜ ์žˆ์–ด์„œ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์ธ๋งŒํผ ๋ฏธ๋ฆฌ ์„ธํŒ…ํ•  ์ˆ˜ ์—†๊ฒŒ๋งŒ ๋งŒ๋“ค๋ฉด๋œ๋‹ค.

์ฆ‰ ์ธ์ฆ์ •๋ณด๋ฅผ ๋„ฃ์œผ๋ฉด ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

 

์ธ์ฆ ์ •๋ณด ์ถ”๊ฐ€

ํ•˜์ง€๋งŒ ๋ชจ๋“  ๊ณณ์—์„œ ์ธ์ฆ์„ ์ถ”๊ฐ€์ ์œผ๋กœ ์ง„ํ–‰ํ•œ๋‹ค๋ฉด? ์ด๋Š” ๊ท€์ฐฎ์Œ์„ ๋„˜์–ด์„œ์„œ ์ด์šฉ์‹œ์˜ ์งœ์ฆ์„ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์ธ์ง€ํ•ด์•ผ ํ•œ๋‹ค.

๊ทธ๋Ÿฌ๋ฏ€๋กœ ๊ฐœ๋ฐœ์ž์˜ ์ž…์žฅ์—์„œ ํŒ๋‹จ ํ–ˆ์„ ๋•Œ ๋ฏผ๊ฐํ•œ ์ •๋ณด๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ๋„ฃ์–ด์•ผํ•œ๋‹ค.

๋ณธ์ธ ์ธ์ฆ / ํœด๋Œ€ํฐ ์ธ์ฆ / 2์ฐจ์ธ์ฆ / ๋น„๋ฐ€๋ฒˆํ˜ธ ์ธ์ฆ

ex) ๊ฐœ์ธ์ •๋ณด ๋ณ€๊ฒฝ ํŽ˜์ด์ง€

๊ธฐ์กด ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ํ•จ๊ผ ์ž…๋ ฅ๋ฐ›๋Š” ๋ฐฉ์‹์„ ์ทจํ•จ์œผ๋กœ์„œ ๊ธฐ์กด ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ๋ฏธ๋ฆฌ ์„ธํŒ…ํ•  ์ˆ˜ ์—†๋Š” ๊ฐ’์ด๋ฏ€๋กœ ๋Œ€์‘์ฑ…์ด ๋  ์ˆ˜ ์žˆ๋‹ค.


์งˆ๋ฌธ ํ™˜์˜, ์ˆ˜์ • ๋ฐ ๋ณด์™„์— ๋Œ€ํ•œ ์ง€์  ํ™˜์˜