1. 개요

1-1. 해킹 사례

"모텔서 즐거우셨나요?" 여기어때 해킹사건의 전말

[출처: 중앙일보] "모텔서 즐거우셨나요?" 여기어때 해킹사건의 전말

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/ca2362cf-d0d9-4bd4-a4f7-08d2ab6b588f/_.png

뽐뿌 해킹사고, 예견됐지만 못 막았다?

[출처: 보안뉴스] 뽐부 해킹사고, 예견됐지만 못 막았다?

어나니머스, WTO 웹사이트 공격…직원 정보유출

[출처: 데일리시큐] 어나니머스, WTO 웹사이트 공격... 직원 정보 유출

위의 사례들에서 알 수 있는 공통점은 대량의 개인정보를 가진 곳에서 수 만명의 개인정보가 유출되었다는 것이다. 이처럼 개발자의 부주의 등으로 인해 생기는 취약점을 이용한 해킹사건들이 많다. 위의 3가지 사례들은 그 중 SQL Injection으로 인한 해킹 사건들이다.

1-2. SQL Injection?

SQL Injection 이란 악의적인 사용자가 보안상의 취약점을 이용하여, 임의의 *SQL 문을 직접 혹은 자동화를 이용해 주입하고 실행되게 하여 데이터베이스가 비정상적인 동작을 하도록 조작하는 행위로, 주로 고객정보를 많이 보유하고 있는 기업을 대상으로 많이 이뤄지고 있다.

주로 쓰이는 수법으로는 *error based SQL Injection과 *Blind SQL Injection 등이 있다.

<aside> 💡 SQL

error based SQL Injection - 사용자의 정보를 검색하고 싶은데, 사용할 수 있는 조건으로 "이름이 ()인가?"가 있다고 해보자. 여기서 괄호에 **"'햄스터인가? 또는 사람은 사람"**이라고 넣어주면, 조건문에는 **"이름이 '햄스터'인가? 또는 사람은 사람인가?"**가 된다. 이것은 항상 참이 되기 때문에 해커는 사용자의 정보를 검색할 수 있다. 이것을 논리적 오류라고 하며, 이 오류를 이용한 수법이 error based SQL Injection이다.

Blind SQL Injection - SQL Injection은 오류메시지에 포함된 DB의 정보를 보면서 파악하는 공격 수법이다. 하지만 Blind SQL Injection은 SQL 쿼리의 참(페이지가 출력o)과 거짓(페이지 출력x) 중에서 참인 경우만을 가지고 DB 구조를 파악하는 방법이다.


</aside>

이 공격의 피해로는 고객정보의 대량 조회, 취득, 삭제와 관리자 권한 획득, 인증 우회 등이 있다.

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/21fcdb38-908e-4e08-8d56-694af46924ec/sql__owasp.png

SQL Injection은 위의 그림에서와 같이 OWASP Top 10에서도 이러한 인젝션 기법이 보안 위협 1위로 분류될 만큼, 간단하면서도 공격 피해가 매우 크기 때문에 각별한 주의가 필요하다. 개발자들은 개발단계에서부터 모든 입력값에 대한 검증절차를 설계하고 구현하여 SQL Injection피해를 줄이려는 노력이 필요하다.

<aside> 💡 OWASP Top 10은 웹 취약점 중에서 많이 발생하고, 보안상의 영향을 크게 줄 수 있는 공격 10가지를 선정한 공개된 문서이다.

</aside>

2. 취약점 보고서의 목적 및 중요성

SQL Injection은 간단하고 오래된 공격이지만, 실제로 소니픽쳐스 러시아, 소니에릭슨, 소니 뮤직 등의 웹사이트들이 고객정보 탈취를 당한 바 있다. 개발자들이 개발단계에서부터 모든 입력값에 대한 검증절차를 설계하고 구현하지 않아서이다. 그래서 이 취약점 보고서에서는 온라인 클래스가 SQL 인젝션 공격을 당했을 때, 학생들이 받을 피해를 서술하여 SQL Injection의 예방의 중요성을 느낄 수 있게 할 것이다. 그리고 예방법, 대응방안을 공유하고자 한다.

3. 취약점 보고서의 내용과 범위

나는 SQL INEJCTION을 통해 온라인 클래스의 강의 자료들을 삭제하는 것을 보여주고자 한다.

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/0e4e0812-48da-4b74-967d-a3c3836a1040/classRoom.png

위 사진에 보면, 각 수업들은 "번호-과목"이 굵은 글씨로 쓰여 있고, 선생님의 말씀이 밑에 적혀있는 것을 알 수 있다. 참고로 이 실습에서의 데이터베이스 정보는 다음과 같다.