[Database] SQL Injection์ด๋ž€?

sukyeongsยท2023๋…„ 3์›” 31์ผ
1

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(Database)

๋ชฉ๋ก ๋ณด๊ธฐ
2/9
post-thumbnail

๐Ÿ˜ˆ SQL Injection

SQL Injection : ์ฝ”๋“œ ์ธ์ ์…˜์˜ ํ•œ ๊ธฐ๋ฒ•์œผ๋กœ, ํด๋ผ์ด์–ธํŠธ์˜ ์ž…๋ ฅ๊ฐ’์„ ์กฐ์ž‘ํ•˜์—ฌ ์„œ๋ฒ„์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๊ณต๊ฒฉํ•˜๋Š” ๊ณต๊ฒฉ๋ฐฉ์‹

  • ์•…์˜์ ์ธ ์‚ฌ์šฉ์ž๊ฐ€ ๋ณด์•ˆ์ƒ์˜ ์ทจ์•ฝ์ ์„ ์ด์šฉํ•˜์—ฌ, ์ž„์˜์˜ SQL ์ฟผ๋ฆฌ๋ฌธ์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ฃผ์ž…ํ•ด ๋น„์ •์ƒ์ ์ธ ๋™์ž‘์„ ํ•˜๋„๋ก ์กฐ์ž‘ํ•˜๋Š” ๊ณต๊ฒฉ ๊ธฐ๋ฒ•์ด๋‹ค.
  • SQL ์‚ฝ์ž…, SQL ์ฃผ์ž…์œผ๋กœ๋„ ๋ถˆ๋ฆฐ๋‹ค.
  • ๊ณต๊ฒฉ์ด ๋น„๊ต์  ์‰ฌ์šด ํŽธ์ด๋ฉฐ, ๊ณต๊ฒฉ์— ์„ฑ๊ณตํ•  ๊ฒฝ์šฐ ํฐ ํ”ผํ•ด๋ฅผ ์ž…ํž ์ˆ˜ ์žˆ๋Š” ๊ณต๊ฒฉ์ด๋‹ค.

โš”๏ธ ๊ณต๊ฒฉ ๋ฐฉ๋ฒ•

1) Error based SOL Injection

  • ๋…ผ๋ฆฌ์  ์—๋Ÿฌ๋ฅผ ์ด์šฉํ•œ SQL Injection
  • ๊ฐ€์žฅ ๋งŽ์ด ์“ฐ์ด๋Š” ๊ณต๊ฒฉ ๊ธฐ๋ฒ•์ด๋‹ค.

์œ„ ์‚ฌ์ง„์€ ํ•ด์ปค๊ฐ€ ์ž„์˜์˜ SQL ๊ตฌ๋ฌธ(' OR 1=1 --)์„ ์ฃผ์ž…ํ•˜์—ฌ SQL์„ ์กฐ์ž‘ํ•˜๊ณ  ์žˆ์Œ์„ ๋ณด์—ฌ์ค€๋‹ค.

  • OR 1=1 : ์ฐธ์œผ๋กœ ๋งŒ๋“ ๋‹ค. (์›๋ž˜๋Š” id, password๋กœ User find ํ•ด์•ผํ•จ)
  • -- : ๋’ค์— ์˜ค๋Š” ๊ตฌ๋ฌธ์„ ์ฃผ์„์ฒ˜๋ฆฌ ํ•œ๋‹ค = password ๊ฒ€์ฆ์„ ๋ชป ํ•˜๊ฒŒ ๋œ๋‹ค.

๊ฐ„๋‹จํ•œ ๊ตฌ๋ฌธ์ด์ง€๋งŒ, Users ํ…Œ์ด๋ธ”์— ์žˆ๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•จ์œผ๋กœ์จ ๋” ํฐ ํ”ผํ•ด๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.


2) Union based SQL Injection

Union : ๋‘ ๊ฐœ์˜ ์ฟผ๋ฆฌ๋ฌธ์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ๋ฅผ ํ†ตํ•ฉํ•˜์—ฌ ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”๋กœ ๋ณด์—ฌ์ฃผ๋Š” ํ‚ค์›Œ๋“œ

  • Union ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•œ SQL Injection
  • Union Injection์ด ์„ฑ๊ณตํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” 1) Union ํ•˜๋Š” ๋‘ ํ…Œ์ด๋ธ”์˜ ์ปฌ๋Ÿผ ์ˆ˜๊ฐ€ ๊ฐ™์•„์•ผ ํ•˜๊ณ , 2) ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด ๊ฐ™์•„์•ผ ํ•œ๋‹ค

์œ„ ์‚ฌ์ง„์˜ Injection ๊ตฌ๋ฌธ์—๋Š” ์‚ฌ์šฉ์ž์˜ id์™€ password๋ฅผ ์š”์ฒญํ•˜๋Š” ์ฟผ๋ฆฌ๊ฐ€ ๋‹ด๊ฒจ ์žˆ๋‹ค.

โžก๏ธ Injection์ด ์„ฑ๊ณตํ•˜๊ฒŒ ๋˜๋ฉด ์‚ฌ์šฉ์ž์˜ ๊ฐœ์ธ์ •๋ณด๊ฐ€ ๊ฒŒ์‹œ๊ธ€๊ณผ ํ•จ๊ป˜ ๋…ธ์ถœ๋˜๊ฒŒ ๋œ๋‹ค.


3) Blind SQL Injection - Boolean based SQL

  • Blind SQL Injection : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ๋ถ€ํ„ฐ ํŠน์ •ํ•œ ๊ฐ’์ด๋‚˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌ๋ฐ›์ง€ ์•Š๊ณ , ์ฐธ๊ณผ ๊ฑฐ์ง“์˜ ์ •๋ณด๋งŒ ์•Œ ์ˆ˜ ์žˆ์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
  • ์„œ๋ฒ„๊ฐ€ ์‘๋‹ตํ•˜๋Š” ์„ฑ๊ณต or ์‹คํŒจ ๋ฉ”์‹œ์ง€๋ฅผ ์ด์šฉํ•˜์—ฌ DB ํ…Œ์ด๋ธ” ์ •๋ณด ๋“ฑ์„ ์ถ”์ถœํ•œ๋‹ค.

4) Blind SQL Injection - Time based SQL

  • 3๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ํŠน์ •ํ•œ ์‘๋‹ต ๋Œ€์‹  ์ฐธ or ๊ฑฐ์ง“์˜ ์‘๋‹ต์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ •๋ณด๋ฅผ ์œ ์ถ”ํ•˜๋Š” ๊ธฐ๋ฒ•์ด๋‹ค.
  • Time based SQL์€ ์œ„ ์‚ฌ์ง„์˜ SLEEP ํ•จ์ˆ˜ ๊ฐ™์€ ์‹œ๊ฐ„ ๊ด€๋ จ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฃผ์–ด์ง„ ์กฐ์ž‘ ๊ตฌ๋ฌธ์ด ์ฐธ์ด๋ผ๋ฉด SLEEP(2)๊ฐ€ ๋™์ž‘, ๊ฑฐ์ง“์ด๋ผ๋ฉด ๋™์ž‘ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์›๋ฆฌ๋กœ SQL Injection ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

5) Stored Procedure SQL Injection

๐Ÿ’ก Stored Procedure : ์ผ๋ จ์˜ ์ฟผ๋ฆฌ๋ฅผ ๋งˆ์น˜ ํ•˜๋‚˜์˜ ํ•จ์ˆ˜์ฒ˜๋Ÿผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์ฟผ๋ฆฌ์˜ ์ง‘ํ•ฉ

  • ์ €์žฅ๋œ Procedure์—์„œ์˜ SQL Injection
  • ๊ณต๊ฒฉ์ž๊ฐ€ ์‹œ์Šคํ…œ ๊ถŒํ•œ์„ ํš๋“ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๊ณต๊ฒฉ ๋‚œ์ด๋„๊ฐ€ ๋†’๋‹ค.
  • ๊ณต๊ฒฉ์— ์„ฑ๊ณตํ•œ๋‹ค๋ฉด ์„œ๋ฒ„์— ์ง์ ‘์ ์ธ ํ”ผํ•ด๋ฅผ ์ž…ํž ์ˆ˜ ์žˆ๋‹ค.

6) Mass SQL Injection

  • ๋‹ค๋Ÿ‰์˜ SQL Injection ๊ณต๊ฒฉ (DDos)
  • ๋ณดํ†ต ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ’์„ ๋ณ€์กฐํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์•…์„ฑ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฝ์ž…ํ•ด์„œ, ์‚ฌ์šฉ์ž๋“ค์ด ๋ณ€์กฐ๋œ ์‚ฌ์ดํŠธ์— ์ ‘์†ํ•˜๋ฉด ์ข€๋น„PC๋กœ ๊ฐ์—ผ์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•œ๋‹ค.

๋ฐฉ์–ด ๋ฐฉ๋ฒ•

1) ์ž…๋ ฅ ๊ฐ’์— ๋Œ€ํ•œ ๊ฒ€์ฆ

  • ์„œ๋ฒ„ ๋‹จ์—์„œ ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ ๊ธฐ๋ฐ˜์œผ๋กœ SQL Injection์— ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋ฒ•, ํ‚ค์›Œ๋“œ์ธ์ง€ ์•„๋‹Œ์ง€๋ฅผ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค.

๐Ÿšซ ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ๋กœ ๊ฒ€์ฆํ•˜์ง€ ์•Š๋Š” ์ด์œ ?

โžก๏ธ ์ˆ˜๋งŽ์€ ์ฐจ๋‹จ๋ฆฌ์ŠคํŠธ๋ฅผ ๋“ฑ๋กํ•ด์•ผ ํ•˜๋ฉฐ, ๋ฆฌ์ŠคํŠธ์—์„œ ํ•˜๋‚˜๋ผ๋„ ๋น ์ง€๊ฒŒ ๋˜๋ฉด ๊ณต๊ฒฉ์— ์„ฑ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.


2) Error Message ๋…ธ์ถœ ๊ธˆ์ง€

  • ๊ณต๊ฒฉ์ž๊ฐ€ SQL Injection์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„  DB ์ •๋ณด(ํ…Œ์ด๋ธ”๋ช…, ์ปฌ๋Ÿผ๋ช… ๋“ฑ)๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ จ ์—๋Ÿฌ ๋ฐœ์ƒ ์‹œ ๋ณ„๋‹ค๋ฅธ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ ์ฟผ๋ฆฌ๋ฌธ + ์—๋Ÿฌ ๊ด€๋ จ ๋‚ด์šฉ์„ ์‘๋‹ต์œผ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

โ†’ ์ด ๊ณผ์ •์—์„œ ํ…Œ์ด๋ธ”๋ช…, ์ปฌ๋Ÿผ๋ช…, ์ฟผ๋ฆฌ๋ฌธ ๋“ฑ์ด ๋…ธ์ถœ๋  ์ˆ˜ ์žˆ๋‹ค.

โžก๏ธ ๋”ฐ๋ผ์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ จ ์—๋Ÿฌ ๋ฐœ์ƒ ์‹œ ์‚ฌ์šฉ์ž์—๊ฒŒ๋งŒ ๋ณด์—ฌ์ง€๋Š” ์ƒˆ๋กœ์šด ์ฐฝ์„ ๋„์šฐ๋Š” ๋“ฑ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์•ผํ•œ๋‹ค.


3) Prepared Statement ์‚ฌ์šฉ

  • Prepared Statement๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ ๊ฐ’์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋“ค์–ด๊ฐ€๊ธฐ ์ „ DBMS๊ฐ€ ๋ฏธ๋ฆฌ ์ปดํŒŒ์ผํ•˜์—ฌ ์‹คํ–‰ํ•˜์ง€ ์•Š๊ณ  ๋Œ€๊ธฐํ•œ๋‹ค.

โžก๏ธ ์ž…๋ ฅ ๊ฐ’๋งŒ์„ ๋ฌธ์ž์—ด๋กœ ์ธ์‹ํ•˜์—ฌ ๊ณต๊ฒฉ์ฟผ๋ฆฌ๊ฐ€ ์ž…๋ ฅ์œผ๋กœ ๋“ค์–ด๊ฐ„๋‹ค๊ณ  ํ•˜๋”๋ผ๋„ ์˜๋„๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค.


4) ์›น ๋ฐฉํ™”๋ฒฝ ์‚ฌ์šฉ

  • ์›น ๊ณต๊ฒฉ ๋ฐฉ์–ด์— ํŠนํ™”๋œ ์›น ๋ฐฉํ™”๋ฒฝ์„ ์‚ฌ์šฉํ•œ๋‹ค.

  • ์›น ๋ฐฉํ™”๋ฒฝ : SWํ˜•, HWํ˜•, Proxyํ˜•์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.

    • SWํ˜• : ์„œ๋ฒ„ ๋‚ด์— ์ง์ ‘ ์„ค์น˜
    • HWํ˜• : ๋„คํŠธ์›Œํฌ ์ƒ์—์„œ ์„œ๋ฒ„ ์•ž ๋‹จ์— ํ•˜๋“œ์›จ์–ด ์žฅ๋น„๋กœ ์„ค์น˜
    • Proxyํ˜• : DNS ์„œ๋ฒ„์ฃผ์†Œ๋ฅผ ์›น ๋ฐฉํ™”๋ฒฝ์œผ๋กœ ๋ฐ”๊ฟ”, ์„œ๋ฒ„๋กœ ๊ฐ€๋Š” ํŠธ๋ž˜ํ”ฝ์ด ๋ฐฉํ™”๋ฒฝ์„ ๋จผ์ € ๊ฑฐ์น˜๋„๋ก ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•

Reference

profile
๊บŒ๊บŒ๋ฅ ๋ฆฌ

0๊ฐœ์˜ ๋Œ“๊ธ€