안녕하세요 유저인사이트 박준호입니다.
저는 이번에 웹 개발자라면 알아야 할 OWASP Top 10 보안 취약점과 대응 방안에 대해 정리 해봤습니다.
이 취약점이 가리키는 내용들과 해당 취약점의 대처 방안을 Spring Security 기준에서 알아보도록 하겠습니다.
OWASP
OWASP (Open Web Application Security Project)는 웹 애플리케이션 보안을 위한 오픈 소스 프로젝트로, 매년 많은 전문가들이 참여해 웹 애플리케이션 보안 취약점을 조사하고, OWASP Top 10이라는 보안 취약점 목록을 발표합니다.
OWASP Top 10은 현재 가장 흔한 웹 애플리케이션 보안 취약점들을 정리한 목록입니다.
매년 목록들이 갱신되는데, 해가 넘어가면서 사라지거나 취합되기도 합니다.
OWASP Top 10
1. 잘못된 접근 제어(Broken Access Control)
이 취약점은 악의적인 사용자가 권한 없이 시스템 이나 리소스에 접근할 수 있는 취약점을 가리킵니다.
취약점이 발생하는 경우로는
1. 관리자만이 접근할 수 있는 특정 페이지나 메소드를 잘못된 접근 권한 부여로 인해 악의적인 사용자의 접근을 허락하는 경우
2. 세션관리를 약한 비밀번호, 쉬운 세션 토큰 등으로 하여금 기능이 무의미해지는 경우 등이 있습니다.
대처 방안으로는
1. antMatchers를 통해 Url 접근 통제.
http
.authorizeRequests()
.antMatchers("/admin/**").hasRole("ADMIN")
.antMatchers("/user/**").hasRole("USER")
.anyRequest().authenticated()
...
2. @Secured를 통해 메소드의 접근 통제.
@Secured("ROLE_ADMIN")
3. 동시 세션 제어, 세션 타임아웃 처리하기 등이 있습니다.
2. 암호화 오류(Cryptographic Failures)
이 취약점은 암호화 관련 기능을 부적절하게 구현하거나 사용할 때 발생할 수 있는 보안 취약점을 가리킵니다.
취약점이 발생하는 경우는
암호화 매커니즘과 크게 관련이 있으며,
대처 방안으로는
알려진 암호화 메커니즘(BCryptPasswordEncoder, StandardPasswordEncoder 등) 사용하기 등이 있습니다.
3. 인젝션(Injection)
이 취약점은 악의적인 사용자가 애플리케이션으로 비정상적인 데이터를 주입하여 애플리케이션의 동작을 변경하거나 악용하는 것을 의미합니다.
취약점이 발생하는 경우는
주로 데이터베이스 쿼리, 명령어 실행 등의 곳에서 발생합니다.
대처 방안으로는
1. 미리 준비된 구문에 사용자의 입력을 파라미터로만 받아 안전하게 필터링하기.
2. ORM(JPA, Hibernate) 사용하기.
3. OWASP ESAPI 라이브러리 사용하기 등이 있습니다.
https://github.com/ESAPI/esapi-java-legacy
4. 안전하지 않은 설계(Insecure Design)
이 취약점은 애플리케이션의 설계 단계에서 보안 원칙과 사례를 충분히 고려하지 않아 발생하는 취약점을 가리킵니다. 간단하게 말해서 전체적인 보안 설계 미흡이라고 생각하면 됩니다.
대처 방안으로는
1. OWASP 보안 지침 준수
2. 안전한 인증 및 세션 관리 등이 있습니다.
5. 보안 세션 취약점(Security Misconfiguration)
이 취약점은 애플리케이션, 웹 서버, 데이터베이스 등의 구성 요소들이 잘못된 구성 설정으로 인해 보안에 취약한 상태에 놓일 수 있는 취약점을 가리킵니다.
취약점이 발생하는 경우는
1. 기본 설정값을 그대로 사용하는 경우
2. 불필요한 기능이 활성화된 상태로 사용하는 경우가 있습니다.
대처 방안으로는
세션 관리, 암호화 알고리즘 등의 기본 설정을 수정하기 등이 있습니다.
6. 취약하거나 오래된 컴포넌트 및 라이브러리(Vulnerable and Outdated Components)
이 취약점은 애플리케이션에 사용된 컴포넌트 및 라이브러리가 보안 취약점을 가지고 있거나 오래된 버전을 사용하고 있어 악용될 수 있는 취약점을 가질 수 있는 상태를 가리킵니다.
취약점이 발생하는 경우는
취약한 컴포넌트 및 라이브러리를 사용할 때, 악의적인 사용자가 해당 취약점을 악용하여 시스템에 침입하거나 공격을 수행할 수 있습니다.
대처 방안으로는
1. Maven, Gradle과 같은 빌드 도구를 사용하여 자동으로 의존성을 최신 버전으로 유지하기.
2. OWASP Dependency-Check와 같은 도구를 사용하여 취약한 컴포넌트 및 라이브러리를 탐지하기 등이 있습니다.
https://github.com/jeremylong/DependencyCheck
7. 식별 및 인증 실패(Identification and Authentication Failures)
이 취약점은 애플리케이션의 식별 및 인증 기능이 약점을 가지고 있어, 사용자 식별과 인증에 실패할 수 있는 상태를 가리킵니다.
취약점이 발생하는 경우는
1. 인증되지 않은 사용자가 액세스를 허용받는 경우.
2. 인증된 사용자의 신원이 위조되는 경우가 있습니다.
대처 방안으로는
1. SMS 인증, 이메일 확인 등의 다중 인증 사용하기.
2. OAuth 등의 강력한 인증 매커니즘 사용하기 등이 있습니다.
8. 소프트웨어와 데이터 무결성 실패(Software and Data Integrity Failures)
이 취약점은 데이터의 무결성을 침해하거나 수정되지 않은 소프트웨어의 실행을 보장하지 못하는 상황을 의미합니다.
취약점이 발생하는 경우는
1. 애플리케이션의 소스 코드나 실행 파일이 수정되는 경우.
2. 애플리케이션에서 중요한 데이터가 보호되지 않은 경우가 있습니다.
대처 방안으로는
1. 중요한 데이터에 대해 암호화 하기.
2. 애플리케이션으로의 입력값을 검증하고 필터링하기 등이 있습니다.
9. 보안 로깅 및 모니터링(Security Logging and Monitoring)
이 취약점은 취약점이라기 보다는 발생하는 보안 이벤트를 기록하고 모니터링하는 것을 의미합니다. 이를 통해 악성 활동, 취약점 공격, 비정상적인 동작 등을 탐지하고 대응할 수 있습니다.
대처 방안으로는
악의적인 로그인 시도나 인증 실패를 탐지하기 위해 로그인 시도에 대한 로그를 기록하기 등이 있습니다.
10. 서버측 요청 위조(Server Side Request Forgery)
이 취약점은 공격자가 악용하여 서버 내부 리소스에 접근하거나 외부 시스템에 요청을 보낼 수 있는 취약점을 가리킵니다.
취약점이 발생하는 경우는
애플리케이션이 외부 시스템과 상호 작용하는 경우, 공격자는 악의적인 요청을 보내 외부 시스템에 대한 공격을 수행할 수 있습니다.
대처 방안으로는
1. 애플리케이션이 외부 리소스에 접근할 때 허용되는 호스트 목록을 지정하여 필터링 하기.
2. csp 설정하기 등이 있습니다.
http.
.contentSecurityPolicy(cspConfig -> cspConfig.policyDirectives("url"))
...
박준호 / 선임연구원
Junho Park / 서비스R&D팀
'세미나' 카테고리의 다른 글
Spring Boot 개발 중 자주 하는 실수 모음 (0) | 2023.05.09 |
---|---|
Github Actions을 통한 Docker이미지 자동 배포 (0) | 2023.04.27 |
Svelte로 웹 개발을 간소화하기 (0) | 2023.04.13 |
실무에서 사용하는 Spring Security Configuration (0) | 2023.04.04 |
GPS 데이터와 좌표계에 대한 문제 해결 과정 (0) | 2023.03.17 |