Today I Learned

[TIL] 시큐어 코딩

mhko411 2021. 8. 18. 09:22
728x90

OWASP에서 가장 리스크가 큰 것은 SQL 인젝션

암호화 실무에서는 복호화 불가능한 SHA256을 많이 쓰임

 

시큐어 코딩은 개발된 소프트웨어의 소스 코드에서 보안 취약점을 제거하고 설계 및 구현 단계에서 보안 약점을 고려하여 시스템을 안전하게 유지할 수 있도록 코딩하는 것이다. 그렇다면 어떠한 보안 취약점을 고려하여 설계해야하는지 대표적인 취약점들과 방어할 수 있는 방법들을 알아보자.


SQL 인젝션

OWASP(오픈소스 웹 어플리케이션 보안 프로젝트)에서는 웹에 대한 보안 취약점 10개를 발표했다. 그 중 가장 취약한 것은 인젝션에 관한 내용이다. 대표적으로 SQL 인젝션은 사용자가 입력한 데이터에 대해 검증 단계를 거치지않아 공격자가 데이터 입력 후에 DB 쿼리 로직을 변경하는 것이다. 

 

이를 예방하기 위해서 사용자가 입력한 데이터에 대해 파라미터화된 질의문으로 사용하고 유효성 검사를 진행해야하고 다음과 같은 질의문을 사용할 수 있다.

ID와 비밀번호의 길이에 제한을 둔다. 왜냐하면 공격자가 데이터를 입력하게되면 ID와 비밀번호의 길이가 길어지기 때문에 제한을 두어 공격 구문을 삽입하는 것이 어려워지도록 한다.

인자에 SQL문에서 쓰이는 예약어 삽입을 제한한다. 인젝션 공격을 위해서 SQL문에서의 예약어를 사용할 가능성이 높기 때문에 SQL문에서 쓰이는 명령어를 강제적으로 삭제하도록한다.

인자에 알파벳과 숫자를 제외한 다른 문자를 사용하지 못하도록 한다. 공격자가 데이터를 작성할 때 특수문자를 사용할 가능성이 높다. 따라서 알파벳과 숫자를 제외한 나머지 문자들을 강제적으로 삭제하여 예방한다.

 

XSS

XSS 역시 OWASP TOP 10에 포함된 취약점이여 관리자 또는 권한이 없는 사용자가 검증되지 않은 데이터가 포함된 스크립트를 웹 사이트에 삽입하는 공격이다. XSS 공격 유형에는 아래의 세 가지가 존재한다.

- Stored XSS : 사용자들이 스크립트가 포함된 웹 페이지를 읽으면서 동시에 악성 스크립트가 브라우저에서 실행된다.

- Reflected XSS : 공격을 위한 악성 URL 생성 후에 사용자의 이메일에 전송하여 URL 클릭 시 악성 스크립트가 실행되어 사용자의 민감한 정보를 공격자에게 전달한다.

- DOM XSS : DOM 기반 XSS 취약점이 있는 브라우저에서 해석 단계를 진행할 때 악성 스크립트로 인해 본래의 코드와는 다르게 실행된다.

 

위와 같은 XSS 공격에 대응하기위한 방안은 다음과 같다.

사용자가 입력한 값을 검증한다. 사용자가 입력한 모든 값들에 대해 검증 단계를 거쳐야할 필요가 있다. 또한 웹 방화벽을 사용하여 XSS 뿐만 아니라 인젝션 공격에도 방어하도록 한다.