OWASP로 알아보는 개발 생태계 본문

우아한테크코스 4기

OWASP로 알아보는 개발 생태계

giron 2022. 11. 17. 00:41
728x90

우아한테크코스에서 보안 특강을 듣고 정리가 필요하겠다고 생각했습니다. 백엔드 개발자도 OWASP정도는 알고 있어야 한다고 생각합니다. 따라서 정리를 해보겠습니다😁

OWASP란?

OWASP는 ‘Open Web Application Security Project’라는 비영리 보안 프로젝트 재단을 의미하는 약자입니다. 이 재단에서는 애플리케이션에서 발생할 수 있는 취약점을 분석하고 연구하고 있으며 3~4년 주기로 Top10을 발표합니다.

 

2021년 이슈

owasp.org

Injection(1st -> 3rd)

2017년까지 1위를 달리던 Injection 취약점이 21년부터는 3위로 내려온 모습을 볼 수 있습니다. 이러한 이유에 대해서는 ORM이 많이 쓰이면서 발생한 현상이라고 생각해볼 수 있겠네요. 왜냐하면 ORM을 사용하면 내부적으로 sql-Injection위험에 대해서 자동으로 회피해주기 때문이죠. 더 자세한 건 sql-Injection자세히 보기 여기서 볼 수 있습니다.

Broken Access Control(5th -> 1st)

다음으로 주목할 점은 Broken Access Control문제입니다. 해당 취약점이 1위가 된 이유는 특강에서 듣기로는 토큰을 사용한 인증이 많아졌기 때문이라고 추측하셨습니다. 실제 해당 취약점은 클라이언트 단에서 인증 토큰 등을 관리하기 때문에 발생하는 문제입니다. 예를 들어, GET요청에서 url을 수정하여 admin같은 url을 넣어서 admin권한으로 공격하는 것이 있습니다. 이외에도 파라미터나 쿠키 등의 요청을 조작해 권한 상승 혹은 타 사용자의 권한을 사용할 수 있는 경우가 있습니다.

이러한 문제를 예방하기 위해서 검증은 반드시 서버에서 수행해야 합니다. 클라이언트에 있는 정보는 어떻게 해서든 탈취할 수 있다고 하는군요! 

Insecure Deserialization(8th ->8th): Software and Data Integrity Failures로 병합

새롭게 병합되어 추가된 내용입니다. 기존에 역직렬화 취약점이 데이터 무결성 실패로 병합이 되었습니다. 간략히 설명하자면 객체를 직렬화하면 바이트코드 형태로 저장이 됩니다. 이때 악성코드를 추가하여 바이트코드를 조작합니다. 이제 해당 바이트코드를 역직렬화하면 악성코드가 감염이 됩니다. 예시로는 아래와 같이 있습니다. 

  • 애플리케이션이 사용하는 라이브러리나 모듈에 대한 무결성 검증이 없어 변조가 가능한 경우
  • 업데이트 공급망에 대한 검증이 없는 경우
  • CI/CD 파이프라인에 대한 적절한 보안성 검토가 없는 경우
  • 직렬화된 데이터에 대한 무결성 검증이 없는 경우

이러한 문제를 예방하기 위해서 역직렬화시에 무결성을 반드시 검사하고 진행해야 합니다. 그리고 입력되는 바이트 스트림의 길이를 제한하는 방식으로도 악성 코드와 같은 삽입을 막을 수 있습니다. 마지막으로 정기적인 보안 패치로 이러한 문제를 예방할 수 있습니다. 

Server-Side-Request-Forgery( -> 10th)

새롭게 top10에 등장한 SSRF공격입니다. SSRF공격은 서버단에서 요청을 발생시켜 내부 시스템에 접근하는 공격으로 공격법은 어렵지만 위력은 그만큼 강력하다고 알려져 있습니다. Public Cloud환경에서는 가상 서버의 메타데이터를 확인할 수 있는 API가 있어, SSRF를 통해 해당 API를 요청하여 가상 서버의 정보를 확인할 수 있습니다. 또한 내부 서버(게이트웨이)에 redirect url을 넣은 요청을 보내서 내부 서버에 접근할 수도 있습니다. 

해당 문제도 마찬가지로 검증이 이루어지지 않고 바로 요청을 받아들이기 때문에 발생합니다. 예방 방법으로는 화이트리스트 방식으로 접근 가능한 url만 열어 놓습니다. 그리고 Localhost, 127.0.0.1 등의 Loopback URI가 들어오면 필터링을 합니다. 또한 불필요한 특수문자 @와 같은 것들이 들어와도 필터링합니다. (공격하는 명령어 중에 @같은 특수문자가 필요했던.. 것 같습니다(가물가물하네요..))

SSRF가 새롭게 top 10으로 올라온 이유로는 아무래도 MSA를 많이 채택하면서 서버간의 소통이 더욱 많아져서 새롭게 올라오지 않았나..라고 조심스럽게 추측해 봅니다.

Secure Coding 

시큐어 코딩은 이런 보안 문제를 인지하고 보안 관련 규정을 체크하면서 코딩하는 것입니다. 정부에서 이러한 secure coding가이드를 내려줍니다. 위의 보안 문제를 막기 위해서는 애초에 코딩할 때, 보안에 취약점이 최대한 생기지 않도록 안전 코딩을 하도록 노력해야겠습니다. 예를 들면 https설정을 했는가?, 응답, 오류 메시지 등에 was나 db정보가 노출되지 않았는가? 세션/토큰의 발급, 갱신, 만료 로직 등이 있는가 와 같은 것들이 있겠습니다.

 

이상 OWASP Top10중 몇몇 이슈들만 확인해봤습니다. 이외에도 XSS, CSRF 등 개발하면서 만난 여러 보안 이슈들이 있었는데 해당 글에 점진적으로 추가하려고 합니다. OWASP를 학습하다 보니 개발 생태계가 어떻게 변하고 있는지 확인도 할 수 있어서 재밌었네요. 앞으로도 계속 찾아볼 것 같네요👍

 

 

우아한테크코스 보안 특강

https://owasp.org/www-project-top-ten/

 

728x90
Comments