๐ 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