시큐어코딩
- home
- 보안소식
- 시큐어코딩
01. [입력 데이터 검증 및 표현] SQL 삽입
2018.03.07 16:49
안녕하세요, 지에스인포입니다.
이제 무더웠던 여름이 지나가고, 서서히 가을이 다가오고 있는 것 같아요^^;;
가을바람이 불어오고 있는 오늘, 시큐어코딩 시 고려해야 할 항목 중 하나인 SQL 삽입에 대해 살펴보겠습니다!
SQL 삽입은, 행정자치부에서 발표한 '소프트웨어 개발보안 가이드'에서 "입력 데이터 검증 및 표현"에 속해있는 첫 번째 항목입니다.
분석, 설계 단계의 보안요구항목에서는 "입력 데이터 검증 및 표현"의 "DBMS 조회 및 결과 검증"이라는 항목으로, 구현 단계 보안약점에서는 "입력 데이터 검증 및 표현"의 "SQL 삽입"이라는 이름으로 명시가 되어있습니다.
# SQL 삽입이란?
SQL 삽입은 데이터베이스(DB)와 연동하는 웹 애플리케이션에서 입력된 데이터에 대한 유효성 검증을 하지 않고 입력된 값을 DB 쿼리 문의 일부분으로 사용하는 경우에 발생할 수 있으며, 공격자는 이를 악용해서 URL 또는 입력 란에 SQL 쿼리 문을 삽입하여 DB로부터 정보를 열람하거나 조작할 수 있습니다.
한 가지 예를 들어 알아보겠습니다.
위 그림 속의 쿼리는 사용자의 이름인 m_name을 입력받아
해당 사용자의 아이디와 비밀번호를 출력하는 쿼리입니다.
이 쿼리 문을 동작하기 위해서 소스 코드에서 선언할 쿼리 문은
다음과 같습니다.
자바의 기준으로 작성한 코드이며, 정상적으로 사용자의 이름이 외부로부터 입력이 되었다면 해당 사용자의 아이디와 비밀번호만이 출력이 될 것입니다. 하지만, 누군가가 m_name 변수에 ' or 'a'='a' -- 이라는 값을 입력하게 되면 어떻게 될까요?
실제로 동작하는 쿼리는 위 그림과 같게 됩니다.
사용자의 이름이 ''(공백) 이거나, 'a'='a' 이라는 조건에 해당하는 사용자의 아이디와 비밀번호를 출력하게 됩니다. 그런데, 'a'='a'라는 조건은 언제나 참이 되는 조건입니다. 따라서, WHERE 절의 모든 내용은 전부 참이 되고, 결론적으로 member 테이블에 존재하는 모든 사용자의 아이디와 비밀번호가 출력됩니다.
이와 같이, 입력 값에 쿼리를 변조시킬 수 있는 값을 입력하고, 자신이 원하는 데이터를 출력하거나 조작하는 공격이 바로 SQL 삽입 공격입니다.
# SQL 삽입을 막기 위한 보안 대책은?
SQL 삽입 공격을 방어하기 위한 대책은 소프트웨어 개발 생명 주기에 따라 크게 두 가지로 나눌 수 있습니다.
SQL 삽입 공격을 방어하는 데에는 정해진 답은 없지만, 소프트웨어 개발보안 가이드에서 제시하는 방법은 위와 같으며, 각각의 상황에 맞게 적절히 사용하기를 권장하고 있습니다.
자, 오늘은 SQL 삽입에 대해 살펴봤습니다.
웹 해킹을 아시는 분이라면 누구나 다 아는 공격이지만 이에 대한 대응 방안을 생각해 본 적이 많지 않을 수 있는데요, 대응 방안까지 확실히 기억해서 안전하게 인터넷을 사용하도록 해요!
그럼 다음에 또 다른 주제로 찾아올게요^^
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
2 | 02. [입력 데이터 검증 및 표현] 경로조작 및 자원삽입 | 관리자 | 2018.03.07 | 10498 |
» | 01. [입력 데이터 검증 및 표현] SQL 삽입 | 관리자 | 2018.03.07 | 8600 |
본사주소 : 서울특별시 금천구 가산디지털1로 181, 가산더블유센터 1508호 COPYRIGHT ⓒ ALL RIGHT RESERVED.