안녕하세요, 넷마블 보안실 게임보안팀 전희창입니다.
이전 글에서 OWASP와 OWASP Top 10 – 2021에 선정된 4개 항목을 먼저 살펴봤습니다. 이번 글에서 나머지 6개 항목을 공유하겠습니다.
OWASP Top 10 – 2021
A05: Security Misconfiguration (보안 설정 오류)
보안 설정 오류(Security Misconfiguration)는 애플리케이션을 최초 설치하거나 업데이트할 때 보안성을 고려하지 않은 설정으로 인해 취약점이 발생하는 경우로, 설정과 관련된 모든 부분을 포함하고 있습니다. XXE(XML External Entity) 항목은 애플리케이션의 잘못된 보안 설정으로 인해 발생하는 취약점으로, 이번 개정으로 보안 설정 오류 항목에 병합됐습니다.
취약점 예시
- 불필요한 기능을 활성화했거나 설치함(예: 불필요 포트, 불필요 페이지, 불필요 계정/권한 등)
- 벤더사에서 기본으로 제공하는 관리자 계정(ID/Password)을 변경하지 않고 사용
- 에러 페이지를 통한 애플리케이션 에러 정보 노출
- 보안 헤더 설정 누락
- 서버 OS, 프레임워크, 라이브러리, 데이터베이스 등의 보안 설정 누락
예방 방법
- 애플리케이션 설치 시 불필요한 기능, 구성요소, 샘플, 문서 등은 제거
- 보안 헤더 설정
- 모든 환경에서 애플리케이션 보안 설정을 검증하고 자동화된 프로세스 구현
공격 시나리오
애플리케이션 설치 시 기본으로 제공하는 관리자 페이지를 보안 설정 없이 그대로 사용하며 서버를 제어하도록 허용한 경우, 공격자가 쉽게 접근해 침투할 수 있습니다.
A06: Vulnerable and Outdated Components(취약하고 지원이 종료된 구성 요소)
취약하고 지원이 종료된 구성 요소(Vulnerable and Outdated Components)는 취약한 버전 또는 EOS/EOL/EOD(소프트웨어 기술 지원 중단) 상태인 소프트웨어를 계속 사용하는 경우를 뜻하며, 그로 인해 발생할 수 있는 모든 보안 위협을 포함하고 있습니다. 서비스를 구성하는 모든 요소(OS, WEB/WAS, 데이터베이스, 애플리케이션, API, 라이브러리, 프레임워크 등)가 여기에 해당됩니다.
취약점 예시
- 지원 종료된 OS 사용(Windows XP, Windows server 2000 등)
- 알려진 취약점이 존재하는 버전의 애플리케이션 사용(nginx, apache tomcat, 오픈소스 웹 에디터, WordPress 등)
- 알려진 취약점이 존재하는 버전의 프레임워크 사용(Apache Struts 2, Spring 등)
- 알려진 취약점이 존재하는 버전의 라이브러리 사용(OpenSSL 등)
예방 방법
- 불필요한 소프트웨어는 제거
- 형상 관리를 통해 사용하는 모든 소프트웨어 버전 체크
- 패치 관리 프로세스를 수립해 소프트웨어 최신 버전 유지
- 알려진 취약점을 지속적으로 모니터링해 취약한 소프트웨어 사용 확인
공격 시나리오
사용자가 취약한 버전의 아파치 스트럿츠 2(Apache struts 2)를 사용하고 있다면, 공격자가 서버를 공격해 원격코드를 실행할 수 있습니다.
A07: Identification and Authentication Failures(식별 및 인증 실패)
2021년 개정으로 기존 취약한 인증(Broken Authentication) 항목에 식별 실패(Identification failures)를 포함시켜, 조금 더 넓은 의미인 식별 및 인증 실패(Identification and Authentication Failures) 항목으로 변경됐습니다. 사용자 신원 확인과 인증 및 세션 관리에 해당하는 항목으로 2017년 대비 5단계가 낮아져 7번째 항목으로 선정됐습니다만, 여전히 많이 발견되는 취약점입니다.
취약점 예시
- Multi-factor 인증이나 2차 인증 부재로 Credential Stuffing, Brute forcing 공격 등에 노출되는 경우
- 인증 실패에 대한 제한이 없어 Brute forcing 공격에 노출되는 경우
- 안전한 비밀번호 생성 정책이 없어, 취약한 비밀번호 생성을 허용하는 경우
- URL에 인증 세션 ID가 노출되는 경우(GET Method)
- 로그인 후 새로운 세션 ID로 발급하지 않고 기존 세션 ID를 재사용하는 경우
- 세션 타임아웃이 없거나 로그아웃 후 세션 파기를 하지 않는 경우
예방 방법
- Multi-factor 인증이나 2차 인증 구현
- 안전한 비밀번호 생성 정책 및 인증 실패 횟수 제한 적용
- 로그인 시 새로운 세션 ID를 생성하고 인증 세션은 암호화된 채널에서 헤더를 통해 전송
- 세션 파기 및 만료 정책 수립
A08: Software and Data Integrity Failures(소프트웨어 및 데이터 무결성 오류)
소프트웨어 및 데이터 무결성 오류(Software and Data Integrity Failures)는 이번에 신설된 항목으로, 안전하지 않은 역직렬화(Insecure deserialization) 항목이 병합됐습니다. 소프트웨어 및 데이터 무결성 오류는 애플리케이션이 신뢰할 수 없는 소스, 저장소 및 CDN, 플러그인, 라이브러리, 모듈에 의존하는 경우에 발생합니다. 안전하지 않은 CI/CD 파이프라인은 개발 및 배포 과정에서 애플리케이션이 변조되면 무결성이 훼손될 가능성이 있으므로, 애플리케이션이 사용하는 코드에 대한 무결성 검증 절차를 추가해야 합니다.
취약점 예시
- 애플리케이션이 사용하는 라이브러리나 모듈에 대한 무결성 검증이 없어 변조가 가능한 경우
- 업데이트 공급망에 대한 검증이 없는 경우
- CI/CD 파이프라인에 대한 적절한 보안성 검토가 없는 경우
- 직렬화된 데이터에 대한 무결성 검증이 없는 경우
예방 방법
- 전자서명, 해시 알고리즘 등을 사용해 애플리케이션 무결성을 검증
- 사용하고 있는 라이브러리가 신뢰할 수 있는 저장소를 사용하고 있는지 확인하고, 중요한 서비스라면 내부 저장소를 별도로 지정해 사용
- CI/CD 파이프라인에 대한 정기적인 보안성 검토 수행
- 직렬화/역직렬화 라이브러리를 사용하는 경우, 직렬화된 데이터에 대해 무결성 검증을 수행
A09: Security Logging and Monitoring Failures(보안 로깅 및 모니터링 오류)
기존에는 불충분한 로깅 및 모니터링(Insufficient Logging & Monitoring) 항목이었으나, 이번 개정에서 보안 로깅 및 모니터링 실패(Security Logging and Monitoring Failures) 항목으로 변경됐습니다. 적절한 로깅과 모니터링이 없다면 공격을 감지하고 대응할 수가 없기 때문에, 취약점 공격 예방뿐 아니라 공격 발생 감지 및 대응까지 포함하는 것으로 개정됐습니다.
취약점 예시
- 로그인, 인증 실패, 권한 설정 등 중요 기능 수행에 대한 로깅이 없는 경우
- 일정 주기로 로그에 대한 백업 절차가 없는 경우
- 로깅 및 모니터링이 필요한 부분을 명확하게 구분해서 로깅하지 않아, 불명확한 로깅 및 모니터링을 하는 경우
예방 방법
- 모든 로그인, 접근 제어, 인증 실패에 대해 로깅을 하고 정기적인 백업을 통해 보관
- 로그 관리 솔루션 등을 활용하기 위해 적절한 형식으로 로깅이 생성되는지 확인
- 의심스러운 활동을 감지하고 신속하게 대응할 수 있도록 임계치를 설정하고 모니터링
- 침해 사고 대응 및 복구 계획 수립
A10: Server-Side Request Forgery(SSRF, 서버 측 요청 변조)
서버 측 요청 변조(Server-Side Request Forgery, SSRF)는 2021년에 신설된 항목입니다. 애플리케이션이 사용자 제공 데이터를 적절한 검증 없이 로컬 및 원격 리소스를 가져와 취약점을 발생시키는 상황을 의미합니다. 공격자는 SSRF 취약점이 존재한는 애플리케이션에서 서버 권한과 신뢰 관계를 이용해, 서버가 조작된 요청을 수행하도록 강제할 수 있습니다.
취약점 예시
- 서버가 적절한 검증 절차 없이 사용자 요청을 로컬 혹은 원격 리소스에 접근하도록 하는 경우
예방 방법
- 서버가 속한 내부 네트워크끼리 통신할 때에도 방화벽을 통해 접근제어 규칙을 적용
- 모든 사용자 제공 데이터에 대한 검증
- 사용자 요청에 대한 서버 측 수행 결과 검증
공격 시나리오
2022년에도…
연말에 갑자기 등장했던 Log4j 이슈로 다들 고생 많으셨습니다. Log4j 이슈 중 맨 앞에 알려졌던 CVE-2021-44228은 위험도 10을 받은 매우 큰 문제였던 만큼 다들 긴장하고 계셨을 텐데, 뒤로도 연관된 취약점(CVE-2021-45046, CVE-2021-45105, CVE-2021-4104)이 계속 등장해서 혼란이 가중되셨으리라 생각합니다. (참고로 Log4j 이슈는 OWASP Top 10 – 2021 기준에선, A03 인젝션과 A08 소프트웨어 및 데이터 무결성 오류에 해당합니다.)
위험도 숫자가 높고 낮음으로 작업 순서는 바뀔 수 있겠으나, 대처하지 않아도 되거나 중요하지 않은 취약점은 없음을 OWASP Top 10 – 2021 내용을 통해 볼 수 있었지 않았나 합니다. OWASP Top 10에도 기준에 따라 순위가 있지만, 순위가 낮다고 해서 중요하지 않은 내용이 아니라는 점을 꼭 알아주셨으면 좋겠습니다.
“이 정도는 괜찮지 않아?”보다는 “이왕 하는 거 끝까지 튼튼하게 완성하자!”는 의지를 다지며, 2022년에 다시 찾아뵙겠습니다.