감자 키우기

[OWASP] Injection 개념 정리 및 대응방안

감_자도리 2021. 7. 2. 23:42

개념

  • 신뢰할 수 없는 데이터를 명령어나 질의문의 일부분으로서 보내질 때 발생.
  • 공격자의 데이터는 개발자가 의도하지 않은 명령을 실행하거나 적절한 권한 없이 데이터에 접근하도록 인터프리터를 속일 수 있음.
  • Injection의 종류로는 SQL, OS, XXE, LDAP 등이 있음.

공격 사례

  • 2017년 3월 "여기어때" 개인정보 유출 사건

    1. '여기어때 마케팅센터 웹페이지'에 SQL인젝션 공격

    2. DB에 저장된 관리자 세션값 탈취

    3. 외부에 노출된 '서비스 관리 웹페이지' 관리자 권한으로 우회 접속

    4. 예약정보, 제휴점 정보 및 회원정보 유출

      ⇒ sql 인젝션 & 세션 변조 공격

      조치) 취약점 점검 실시, '개인정보 유출 대응 매뉴얼'에 따라 대책 수립

  • 2015년 9월 "뽐뿌 해킹사태"

    -뽐뿌 웹사이트 내에 존재하는 SQL 인젝션 취약점을 통해 개인정보 유출

    -2010년 개인정보 유출 해킹 사건이 있었으나 이후 대처하지 않았음

    조치) KISA의 도움으로 홈페이지의 웹쉘 및 악성코드 전수조사, 소스코드 보완작업.

SQL Injection

[개념]

  • DB와 연동된 웹 어플리케이션에서 SQL 질의문에 대한 필터링이 제대로 이루어지지 않을 경우 공격자가 입력이 가능한 폼에 조작된 쿼리를 삽입하여 공격자에게 공개되지 않은 웹 서버의 DB 정보를 열람 또는 조작을 할 수 있는 취약점
  • 공격이 비교적 쉬운 편이고 공격에 성공할 경우 큰 피해가 발생함

[대응 방법]

  • 웹 방화벽(WAF) 사용

  • 동적 SQL 사용 금지

  • DB Error Message 노출 금지

    DB 에러 발생 시 따로 처리하지 않는다면, 에러가 발생한 쿼리문과 함께 에러에 관한 내용을 반환해줌. 이 때, 테이블명, 컬럼명, 쿼리문이 노출될 수 있기 때문에 DB 에러 발생 시 사용자에게 보여줄 수 있는 페이지를 따로 제작하거나 메시지박스를 띄우도록 해야 함.)

  • 서버 단에서 입력 값에 대한 화이트리스트 기반 검증

  • Prepared Statement 구문 사용

    (사용자의 입력값이 데이터베이스의 파라미터로 들어가기 전에 DBMS가 미리 컴파일하여 실행하지 않고 대기함. 그 후 사용자의 입력값을 문자열로 인식하게 하여 공격 쿼리가 들어간다고 하더라도, 사용자의 입력은 이미 의미 없는 단순 문자열이기 때문에 전체 쿼리문도 공격자의 의도대로 작동하지 않음.)