Web - SQL Injection 이론

Aquila·2024년 8월 24일

SecurityAcademy

목록 보기
4/9
post-thumbnail

SQL 인젝션(SQL Injection)

SQL Injection이란?

  • SQL Injection은 웹 어플리케이션이 백엔드에서 구동 중인 데이터베이스에 질의하는 과정에 사용되는 SQL 쿼리를 조작하여 데이터베이스를 대상으로 공격자가 의도한 악의적인 행위를 할 수 있게 하는 취약점
  • 조직 내부의 민감한 데이터나 개인정보를 획득할 수 있으며, 심각한 경우 조직의 데이터 전체를 장악하거나 손상 시킬 수 있음

SQL Injection 동작 원리

SQL Injection 공격 원리

SQL Injection 유형

  • 오류(Error) 기반 SQL Injection
    - 잘못된 문법이나 자료형 불일치 등에 의해 웹 브라우저에 표시되는 데이터베이스 오류를 기반으로 수행되는 공격 기법
    - 공격자는 의도적인 오류를 유발시키고 해당 오류 정보를 바탕으로 데ㅔ이터베이스명, 테이블, 컬럼 정보 등을 파악

  • Union 기반 SQL Injection
    공격자가 의도한 SQL 쿼리를 UNION 연산자를 이용하여 기존 SQL 쿼리문에 덧붙이고 기존 SQL을 무효화시켜 원하는 내부 데이터를 절취할 수 있는 공격 기법

  • Blind SQL Injection
    - 웹 브라우저 화면상에 데이터베이스 오류 정보나 데이터가 직접적으로 노출되지 않을 때 이용되는 기법
    - 공격자가 육악으로 확인할 수 있는 데이터베ㅔ이스 오류나 데이터가 없다는 점에 착안되어 Blind SQL Injection 혹은 추론 기반 SQL Injection이라고 함
    - 공격자는 공격이 성공했는지 판단하기 위해 미세한 서버의 응답과 동작 방식까지 분석하여 단서로 활용

  • Boolean 기반
    - SQL 쿼리의 결과가 참 또는 거짓이냐에 따라 웹 애플리케이션의 응답이 다른 경우 사용됨
    - 참/거짓만을 판단할 수 있는 서버의 응답만으로 공격을 수행하므로 공격자의 많은 시간과 노력이 소요됨

  • Time 기반
    - SQL 쿼리의 결과가 참 또는 거짓이냐에 따라 서버의 응답 시간을 제어할 수 있을 때 사용
    - MySQL의 Sleep(5000);와 같이 밀리초의 단위의 시간 동안 대기하는 SQL 명령을 사용해 공격의 성공 여부를 판단
    - 공격자가 지정한 시간만큼 응답이 지연된다면 SQL Injection에 성공한 것으로 간주

SQL Injection 취약점의 위험

  • SQL Injection 공격은 인증을 우회하는 등의 웹 애플리케이션의 로직을 파괴하거나 조직의 데이터베이스 정보나 개인정보, 또는 의도적으로 숨긴 데이터의 유출 및 데이터의 손상, 손실을 발생시킬 수 있음
  • MSSQL과 같은 일부 데이터베이스에서 제공되는 저장 프로시저(Stored Procedure)를 이용하면 원격 명령 실행 등 시스템의 손상, 전체 장악 기능

SQL Injection 취약점의 보안예방

  • 입력값 검사
    HTTP 요청을 통해 전달되는 사용자 데이터에 SQL 구문으로 해석될 수 있는 문자 또는 공격에 사용되는 SQL 구문들의 포함여부를 검사하고 포함 시 요청을 차단하거나 해당 문자를 제거
    - SQL 기호: 홑따옴표', 겹따옴표", 세미콜론;, 대시-, 샵#, 슬래시샵/#
    - SQL 구문: SELECT, INSERT, UPDATE, DELETE, UNION, GROUP BY, HAVING, ORDER BY 등
  • 매개변수화 된 쿼리 적용
    - 매개변수화된 쿼리는 Prepared Statement라고 불리며, 데이터베이스에ㅔ서 사용되는 동일하거나 유사한 SQL 쿼리를 효율적으로 반복적으로 실행하기 위해 사용되는 기능
    - 매개변수화된 쿼리는 자주 사용되는 SQL 쿼리를 데이터베이스에 준비해두었다가, 해당 SQL 쿼리 실행에 필요한 값들만 매개변수로 전달하여 실행하는 방식
  • 최소 권한 & 최소 기능 사용, 데이터베이스 최신 패치

0개의 댓글