ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SQL injection 2
    CS/Cyber Security 2024. 8. 8. 03:42
    반응형

    이번에는 더 나아가 SQL injection 공격 기법을 더 알아보고 방어 전략을 알아본다.

    WebGoat의 SQL injection(mitigation)파트를 통해  배워본다.

     

    1.공백을 허용하지 않는 경우

    SQL injection 방어를 위해 공백을 허용하지 않는 경우가 존재한다.

    이 경우에는 /%%/라는 주석을 활용한다.

    공백을 넣을 곳에 /%%/를 넣게 되면 이 주석이 공백의 역할을 할 것이다.

     

    2.공백과 SQL 문장을 막은 경우

    이번엔 SQL 문장인 SELECT와 FROM이 들어간 경우 해당 부분을 제외시켜 방어를 하고자 했을때 어떻게 할까?

    이 경우에는 SELECT 대신에 SESELECTLECT, FROM 대신에 FRFROMOM을 넣게 되면 공격이 가능해진다.

     

    3.SQL injection 방어 방법과 ORDER BY 취약점

    OWASP에서 TOP1를 자랑하던 SQL injection은 기술의 발달에 따라 3위로 내려왔다.

    이제 개발자들은 SQL 인젝션을 대비하기 위한 여러가지 방법들을 쓴다

    1)Stored Procedure

    - 사용할 쿼리를 함수화하여 필요할 때 인자로 데이터를 전달받고 이를 쿼리에 사용하는 방식으로 SQL injection을 위한 특수문자를 대입해도 SQL에서 예약어로서 자기 역할을 하지 못하고 공격이 실패한다.

    하지만 stored procedure안에 다른 쿼리를 실행시켜서 무효화시키는 방법이 존재한다.

    2)Parameterized Qurey

    - 쿼리에 사용할 데이터를 파라미터 형태로 전달받는 것으로 대표적으로 Prepared Statement가 있다.

    이는 데이터가 대입될 부분을 ?로 표시하고 DBMS에 전달하면 사용할 쿼리를 컴파일하고 캐싱하는 방식이다.

    3)ORM

    - 프로그래밍 언어의 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑해주는 도구이다.

     

    하지만 이 방어 방법에도 불구하고 ORDER BY를 활용한 SQL injection 취약점이 존재한다.

    Order by 구문에는 문자열이나 숫자가 아닌 쿼리의 일부분이 입력되는데 이때 Prepared Statement와 ORM을 사용해 Order by 구문에 사용할 값을 바인딩 하면 쿼리로서 역할을 잃은 형 변환된 값이 대입되고 Order by 구문에 에러를 발생시킨다.

    즉 , 이 경우에 SQL injection 취약점이 발생한다.

    그러므로 Order by 구문에 직접적으로 사용자의 입력값이 대입되지 않도록 주의해야 한다.

     

    결론

    SQL injection으로 부터 보호하기 위해서 Parameterized Qurey와 ORM 방식을 사용할 수 있지만

    Order By 에서는 어쩔수 없는 취약점이 존재할수 있기 때문에 유념하여 사용자의 입력값이 직접적으로 Order By 구문에 전달 되지 않도록 코드를 작성해야 한다.

     

    반응형

    'CS > Cyber Security' 카테고리의 다른 글

    쿠키와 세션  (1) 2024.12.31
    (WebGat) JWT token  (2) 2024.08.24
    SQL injection  (3) 2024.08.08
    암호화  (2) 2024.07.31
Designed by Tistory.