[네트워크] SQL Injection

Yoon Uk·2023년 5월 1일
0

네트워크

목록 보기
32/34
post-thumbnail

SQL Injection 공격이란?

SQL Injection은 웹 애플리케이션의 보안 취약점을 이용하여 악의적인 SQL 문을 실행시키는 공격 방법입니다.
이 공격으로 인해 데이터베이스의 정보를 탈취하거나 조작할 수 있으며, 심각한 경우에는 시스템을 완전히 제어할 수도 있습니다.

SQL Injection 공격 방식

  • 논리적 오류를 이용한 인증 우회
    로그인 폼에 OR 1=1 -- 와 같은 조건문을 입력하여 항상 참이 되도록 하여 인증을 우회하는 방식입니다.

  • 에러 기반 공격
    잘못된 SQL문을 입력하여 데이터베이스의 에러 메시지를 통해 정보를 얻는 방식입니다.
    예를 들어, UNION SELECT @@version -- 와 같은 문장을 입력하여 데이터베이스의 버전 정보를 알아낼 수 있습니다.

  • 블라인드 공격
    데이터베이스의 에러 메시지가 출력되지 않는 경우에 사용하는 방식입니다.
    참과 거짓을 판별할 수 있는 조건문을 반복적으로 입력하여 데이터베이스의 정보를 하나씩 추출하는 방식입니다.
    예를 들어, AND (SELECT SUBSTRING(password,1,1) FROM users WHERE id='admin')='a' -- 와 같은 문장을 입력하여 admin의 비밀번호의 첫 글자가 a인지 확인할 수 있습니다.

SQL Injection 공격의 대비 방법

  • 입력 값 검증
    사용자로부터 입력 받은 값에 대해 필터링하거나 검증하는 과정이 필요합니다.
    예를 들어, SQL문에 사용되는 특수 문자나 예약어를 필터링하거나, 정규 표현식을 이용하여 입력 값의 형식을 검증할 수 있습니다.

  • 파라미터화된 쿼리 사용
    SQL문에 직접 값을 삽입하는 대신에 파라미터를 사용하는 방식입니다.
    파라미터는 데이터베이스에 전달되기 전에 타입과 길이가 검사되므로 SQL Injection 공격을 방지할 수 있습니다.
    예를 들어, SELECT * FROM users WHERE id=? AND password=? 와 같은 쿼리를 사용하고, ?에 해당하는 값을 별도로 전달하는 방식입니다.

  • 저장 프로시저 사용하기
    저장 프로시저는 데이터베이스에 미리 정의된 SQL 문의 집합입니다.
    저장 프로시저를 사용하면 SQL 문을 별도로 작성하지 않아도 되므로, SQL Injection 공격에 취약한 코드를 줄일 수 있습니다. 하지만 저장 프로시저 자체가 안전한 것은 아니므로, 사용자 입력값에 대한 검증과 필터링은 여전히 필요합니다.

  • 최소 권한 원칙 적용
    데이터베이스에 접근하는 계정의 권한을 최소한으로 제한하는 것입니다.
    예를 들어, SELECT 문만 필요한 경우에는 INSERT나 UPDATE나 DELETE 문을 실행할 수 없도록 하는 것입니다. 이렇게 하면 SQL Injection 공격으로 인한 피해를 최소화할 수 있습니다.

0개의 댓글