[취약점] SQL 인젝션
2024. 3. 22. 14:42ㆍ정보 보안/취약점
정의
대화형 웹 사이트에 비정상적인 사용자 입력 값으로 웹 사이트 SQL 쿼리가 완성되는 약점을 이용하며, 입력 값을 변조하여 비정상적인 SQL 쿼리를 조합하거나 실행하는 공격하는 취약점을 의미한다.
공격 시나리오
사용자 입력 값에 임의의 SQL 구문을 삽입하여 변조된 비정상적인 SQL 쿼리로 DBMS 및 데이터를 열람하거나 조작한다.
대응 방안
- 소스코드에 SQL 쿼리를 사용자 입력 값으로 받는 함수나 코드를 사용하는 경우, 임의의 SQL 쿼리 입력에 대한 검증 로직 구현하여 서버에 검증되지 않은 SQL 쿼리 요청 시 에러 페이지가 아닌 정상 페이지가 반환되도록 필터링 처리
- 웹 방화벽에 SQL 인젝션 관련 룰셋을 적용
판단 기준
주요정보통신기반시설
- 양호 : 임의로 작성된 SQL 쿼리 입력에 대한 검증이 이루어지는 경우
- 취약 : 임의로 작성된 SQL 쿼리 입력에 대한 검증이 이루어지지 않는 경우
점검 예시
주요정보통신기반시설
- 사용자 입력 값에 특수문자나 임의의 SQL 쿼리를 삽입하여 DB 에러 페이지가 반환되는지 확인(Error Based SQL 인젝션 공격 가능 여부 확인 작업)
- 사용자 입력 값에 임의의 SQL 참, 거짓 쿼리를 삽입하여 참, 거짓 쿼리에 따라 반환되는 페이지가 다른지 확인(Blind SQL 인젝션 공격 가능 여부 확인 작업)
- 로그인 페이지에 참이 되는 SQL 쿼리를 전달하여 로그인되는지 확인
전자금융기반시설
- URL 파라미터 또는 XML 등 입력하는 부분에 SQL 구문 입력 후 서버에서 응답한 값에 대한 위험성 점검
- SQL 구문으로 해석될 수 있는 값(글번호, 검색 내용 등)을 입력하여 데이터베이스 내에 저장된 정보 열람 및 시스템 명령 실행가능 여부 점검
- 조작된 XPath 쿼리를 보내어 비정상적인 질의 가능 여부 점검
구체적 보안 설정 방법
1. SQL 쿼리에 사용되는 문자열의 유효성을 검증하는 로직을 구현한다.
2. 아래와 같은 특수문자를 사용자 입력 값으로 지정하는 것을 금지한다. (특수문자들은 DB 종류에 따라 달라질 수 있음)
문자 | 설명 |
' | 문자 데이터 구분기호 |
; | 쿼리 구분 기호 |
--, # | 해당라인 주석 구분 기호 |
/* */ | /* 와 */ 사이 구문 주석 기호 |
3. Dynamic SQL 구문 사용을 지양하고 파라미터 값 문자열 검증하는 기능을 구현한다.
4. 시스템에서 제공하는 에러 메시지 및 DBMS에서 제공하는 에러 코드가 노출되지 않도록 예외처리 기능을 구현한다.
'정보 보안 > 취약점' 카테고리의 다른 글
[취약점] 크로스사이트 스크립팅(XSS) (0) | 2024.03.23 |
---|---|
[취약점] 악성 콘텐츠 (0) | 2024.03.23 |
[취약점] 정보 누출 (0) | 2024.03.23 |
[취약점] 디렉터리 인덱싱 (0) | 2024.03.22 |
[취약점] 운영체제 명령 실행 (2) | 2024.03.22 |