OWASP 상위 10대 위험 관리하기
보안 프로그램의 일환으로 위험 관리는 가장 중요합니다.
OWASP 상위 10대 목록은 애플리케이션에 영향을 미치는 가장 일반적인 위험을 요약한 것으로, 솔루션 보안을 위한 노력을 보여주는 좋은 출발점입니다.
취약점 예방 및 영향 감소
- 보안 SDLC의 일부 요소는 아래 위험에 국한된 것이 아니라 일반적인 보안 문제를 다룹니다.
- 개발자는 보안 코딩 교육에 액세스할 수 있고 참여할 수 있는 시간이 허용됩니다. 이러한 교육은 매우 실용적이며 코드에서 보안 문제를 발견하고 수정하는 실습 경험을 제공하도록 설계되었습니다.
- 내부 코딩 보안 표준 및 보안 설계 원칙은 보안 요구사항의 목록 역할을 하며, 모든 코드가 따라야 하는 규칙 목록을 제공합니다. 정적 스캐닝은 약점과 취약점을 식별하는 데 도움이 됩니다.
- 애플리케이션에 대한 정기적인 내부 침투 테스트가 수행되어 코드가 프로덕션 서버에 도달하기 전에 잠재적인 문제를 발견합니다.
- 기술 스택의 가능한 모든 수준에서 최소 권한 원칙을 구현하여 익스플로잇된 취약점의 영향을 줄입니다.
OWASP 상위 10대 위험
고장난 액세스 제어
모든 액세스는 수직적 및 수평적 권한 상승을 방지하기 위해 발신자 신원, 엔드포인트, 요청 매개변수 등 필요한 데이터를 기반으로 백엔드 시스템에서 승인합니다. 가능한 경우 액세스 제어 솔루션을 재사용합니다. 인증과 관련된 API 호출은 DoS 및 자동화된 데이터 수집의 위험을 줄이기 위해 속도가 제한됩니다.
암호화 실패
웹 클라이언트 또는 최신 기기와 저희 서버 간의 모든 연결은 항상 TLS를 지원합니다. 여기에는 클라이언트 브라우저에서 웹 서버로의 연결뿐만 아니라 기기에서 서비스와의 연결도 포함됩니다. 기기 통신에 대한 특정 고객 요구사항이 없는 한 민감한 데이터를 전송하는 기기의 기기 통신에는 일반 텍스트 프로토콜이 사용되지 않습니다.
암호화 알고리즘과 키 강도는 필요에 따라 정기적으로 검토되고 업데이트됩니다.
SQL 데이터베이스의 미사용 데이터는 암호화된 볼륨에 저장됩니다.
주입
인젝션 유형 취약성에 대한 1차 방어선으로서, 저희 웹 애플리케이션은 입력 유효성 검사를 구현합니다. 사용자 입력은 가능한 경우 유형과 형식에 대해 유효성을 검사합니다.
또한 최신 프레임워크는 XML 문서를 비롯한 특정 객체를 생성할 때 인젝션을 방지하기 위해 적절한 인코딩을 제공하므로 이러한 취약점의 위험이 줄어듭니다.
SQL 인젝션의 위험은 ORM을 올바르게 사용함으로써 크게 줄어듭니다.
OS 명령 인젝션의 위험도 코드에서 OS 명령이 실행되지 않는 기본 Java 기반 기술 스택을 통해 크게 감소합니다.
XSS와 관련하여 저희는 크로스 사이트 스크립팅에 대한 코드 및 테스트 환경을 수동으로 검토합니다. 당사가 사용하는 일부 기술 및 프레임워크는 기본적으로 적절한 인코딩을 적용하여 XSS를 방지하는 데 도움을 줍니다.
안전하지 않은 디자인
내부 코딩 보안 표준과 보안 설계 원칙은 보안 요구사항의 목록 역할을 하며, 모든 코드와 아키텍처가 따라야 하는 규칙 목록을 제공합니다. 잠재적인 개선 사항에 대한 결정을 내릴 때는 BSIMM과 SAMM을 포함한 출처를 고려합니다. 보안위원회는 보안 설계에 대한 거버넌스와 감독을 제공합니다.
보안 구성 오류
저희는 기술 스택의 모든 수준에서 최소 권한 원칙을 구현하는 것을 목표로 합니다. 또한 필요한 구성 요소만 설치하여 공격 표면을 줄입니다. 서버 구성은 내부 정책을 준수하기 위해 자동화된 솔루션으로 관리됩니다. 애플리케이션 수준 구성도 자동으로 관리되며 보안 코드 검토 및 정적 분석을 통해 점검됩니다.
XML 처리의 경우, 가능한 경우 인라인 DTD 처리를 비활성화하거나 필요한 경우 적절한 완화 조치를 적용합니다.
취약하고 오래된 구성 요소
타사 컴포넌트와 그 취약성을 검토합니다. 취약점이 있는 컴포넌트를 평가하고, 해당 취약점이 서비스에 영향을 미치는 경우 위험도에 따라 업데이트 또는 수정 일정을 잡습니다. 오픈 소스 컴포넌트의 경우 취약한 컴포넌트에 대한 GitHub 알림을 통해 이를 지원합니다. 또한 정기적인 네트워크 스캔을 수행하여 환경 전반에서 취약한 서비스를 찾아냅니다.
식별 및 인증 실패
저희 웹 애플리케이션은 NIST 권장 사항(NIST 800-63-3)에 따라 강력한 비밀번호를 요구합니다.
로그인 시도가 여러 번 실패하면 계정이 기하급수적으로 늘어나는 시간 동안 잠깁니다. 성공한 로그인 시도와 실패한 로그인 시도가 모두 기록됩니다. 비밀번호 복구는 토큰만 전송되는 이메일을 통해 이루어집니다. 비밀번호는 절대로 이메일로 전송되지 않습니다. 데이터베이스의 비밀번호는 잘 알려진 표준 구현을 사용하여 적절한 키 파생 함수(일반 암호화 해시가 아님)로 해시됩니다. 이렇게 하면 알려진 비밀번호 해시 목록에 대해서도 무차별 암호 대입 공격을 방지할 수 있습니다.
소프트웨어 및 데이터 무결성 장애
저희 웹 서비스는 신뢰할 수 있고 검토된 CI 파이프라인을 통해 업데이트됩니다. 타사 모듈 취약성은 GitHub에서 부분적으로 제공하는 자동화를 통해 점검됩니다. 디바이스는 서명된 펌웨어 업데이트를 사용하며 서명되지 않거나 신뢰할 수 없는 이미지는 로드하지 않습니다. 펌웨어는 서명 키를 적절히 보호하는 엄격하고 세심하게 설계된 프로세스를 통해서만 서명할 수 있습니다.
불충분한 로깅 및 모니터링
감사 가능한 이벤트가 기록되고 로그가 중앙 저장소에 실시간으로 수집됩니다. 감사 추적을 사용할 수 있습니다. 이상 징후를 감지하기 위한 애플리케이션 모니터링이 마련되어 있습니다. 로깅에는 기밀이 포함되지 않으며 GDPR을 준수합니다.
서버 측 요청 위조
개발자는 이러한 문제를 방지하기 위해 SSRF, 코드 검토 및 정적 스캔에 대해 알고 있습니다. 사용자 입력은 필요한 경우 SSRF를 완화하기 위해 살균 처리됩니다. 또한 침투 테스트의 일부로 유사한 문제를 구체적으로 테스트합니다.