SQL 인젝션 공격(SQL Injection)

말희의 개발 블로그·2024년 11월 28일

개발용어

목록 보기
1/1
post-thumbnail


기사 출처 : https://m.boannews.com/html/detail.html?idx=132447

SQL 인젝션 공격?

SQL 인젝션 공격은 SQL 삽입 공격 또는 SQL 주입 공격 이라고도 하는데 공격자가 웹 애플리케이션의 보안 취약점을 이용해 데이터베이스 쿼리를 조작하거나 악의적인 쿼리를 삽입하여 민감한 정보를 유출하거나 시스템을 제어하는 공격 기법이다.

주요 공격 방법은

로그인 우회

방법: 인증 과정에서 입력 필드에 SQL 구문을 삽입해 인증을 우회.

  • 정상 쿼리
SELECT * FROM users WHERE username = 'admin' AND password = 'password';
  • 공격 쿼리 (입력값: ' OR '1'='1로 username, password 입력)
SELECT * FROM users WHERE username = '' OR '1'='1' AND password = '' OR '1'='1';

-> 항상 참이므로 인증 우회.

주석 활용

SQL의 주석 기법(-- 또는 #)을 사용해 나머지 쿼리를 무효화.

SELECT * FROM users WHERE username = '' OR '1'='1' -- AND password = 'password';

UNION 기반 공격

다른 테이블의 데이터를 합쳐서 반환이 목적.
UNION 키워드로 다른 테이블 결과를 가져옴.

  • 입력값
' UNION SELECT username, password FROM admin --  
  • 쿼리 결과
SELECT username, password FROM users WHERE id = '' UNION SELECT username, password FROM admin --;

블라인드 SQL 인젝션

쿼리 결과가 직접 출력되지 않는 경우 참/거짓을 이용해 정보를 추론.

에러 기반 공격

오류 메시지를 이용해 데이터베이스 정보를 추출.

스토어드 프로시저 악용

데이터베이스의 저장된 프로시저를 호출해 공격 수행.

대량 데이터 삭제

'; DROP TABLE users --  

타임 기반 블라인드 공격

데이터 유무를 시간 지연으로 확인.


예방 방법

  1. Prepared Statement 사용(입력값을 직접 쿼리에 포함하지 않고 매개변수로 전달) :
    쿼리와 데이터를 분리해 입력값을 코드로 실행하지 않음.
  2. 입력값 검증 : 화이트 리스트 방식(허용된 것 외에는 모두 차단)
  3. 이스케이프 처리 : 특수문자 (', --, ;) 등 제거 또는 무효화.
  4. ORM 사용
  5. WAF (Web Application Firewall) :
    공격 패턴 탐지 및 차단.
  6. 권한 관리 : 최소 권한 설정. 애플리케이션 계정에 최소한의 DB 권한 부여.
  7. 에러 메세지 감추기 :
    데이터베이스 오류 메시지를 사용자에게 노출하지 않음.
  8. 최신 보안 패치:
    데이터베이스와 웹 서버 보안 업데이트 유지.

참고 기사

https://m.boannews.com/html/detail.html?mtype=3&tab_type=H&idx=128286

0개의 댓글