보안 코딩
OWASP의 Secure Coding Practices 가이드
보안 코딩을 연습하면 애플리케이션의 취약점과 버그가 줄어듭니다. 많은 포괄적인 가이드가 있으며 적극 권장되는 가이드 중 하나는 OWASP의 Secure Coding Practices 가이드입니다.
https://owasp.org/www-project-secure-coding-practices-quick-reference-guide/migrated_content
위 자료의 한글버전. https://owasp.org/www-pdf-archive/2011년6월_OWASP_시큐어코딩규칙_v2_KOR.pdf
KISA에서 제공하는 소프트웨어 개발 보안 가이드
싱가폴 정부 DevSecOps 지침에서 보안코딩 부분
OWASP의 Secure Coding Practices 가이드를 간략히 요약한 내용임
https://docs.developer.tech.gov.sg/docs/devsecops-playbook/development
다음은 기관에서 통합할 것을 권장하는 몇 가지 중요한 보안 코딩 관행입니다. 이 목록이 완전한 것은 아닙니다.
입력 유효성 검사
매개변수, 헤더, URL과 같은 클라이언트의 모든 입력 데이터를 검증합니다.
데이터 유형, 데이터 범위, 길이를 확인하거나 각 데이터 입력에 대해 정규식(정규식)을 사용합니다.
가능하면 블랙리스트보다 화이트리스트를 구현하십시오.
인증 및 비밀번호 관리
독점 서비스를 구현하는 대신 SGTS에서 제공되는 Singpass 또는 Corppass와 같은 중앙 인증 서비스를 사용하는 것이 좋습니다.
기관이 중앙 인증 서비스를 사용할 수 없는 경우 최소한 암호가 응용 프로그램에서만 읽고 쓸 수 있는 테이블에 암호학적으로 강력한 단방향 솔티드 해시로 저장되어 있는지 확인해야 합니다.
암호 복잡성/길이/비재사용/만료 모범 사례를 구현하는 것이 좋습니다.
로그인 시도가 10회 연속 실패하면 계정을 비활성화합니다.
세션 관리
각 인증에 대해 새 세션 식별자를 생성하고 애플리케이션에 적합한 세션 만료 및 비활성 시간 초과를 구현합니다.
동일한 사용자 계정으로 동시 로그인을 허용하지 말고 동시 로그인이 있어야 하는 비즈니스 요구 사항이 없는 한 이전 세션을 취소하십시오.
액세스 제어
정기적으로 계정을 감사하고 비활성 계정을 비활성화하고 세션 식별자를 취소합니다.
승인된 사용자가 모든 제한된 리소스에 대한 적절한 액세스 제어를 활성화하고 제한된 리소스에 대한 기본 거부 접근 방식을 사용합니다.
오류 처리 및 로깅
오류는 종종 미래의 취약점으로 이어질 수 있는 시스템의 버그를 나타냅니다.
모든 오류 및 예외를 해결합니다. 또한 코드의 최상위 수준에 위치하는 전역 예외가 있을 수 있어 길 잃은 예외를 포착할 수 있습니다.
오류 응답에 디버깅, 스택 추적 또는 민감한 정보를 표시하지 마십시오.
민감한 정보를 로그에 저장하지 말고 권한이 있는 사람만 로그에 액세스할 수 있도록 제한하십시오.
진단 및 향후 완화를 위해 적절한 세부 정보와 함께 오류를 기록합니다.
신뢰할 수 있는 시스템에 오류 로그를 저장합니다.
시스템 설정
HTTP 응답 헤더에서 불필요한 시스템 정보를 제거하십시오.
배포 중에 프로덕션용이 아닌 테스트 코드 또는 기능을 제거하십시오.
별도의 환경에 대해 별도의 구성 파일을 유지 관리합니다.
구성 파일에 비밀이나 민감한 정보를 보관하지 마십시오. AWS Secrets Manager와 같은 비밀 관리 서비스에 보관하십시오.
데이터베이스 보안
강력한 형식의 매개변수화된 쿼리를 사용합니다.
응용 프로그램이 데이터베이스에 액세스할 때 가장 낮은 수준의 권한을 사용하는지 확인합니다.
애플리케이션이 서로 다른 신뢰 구분에 대해 서로 다른 자격 증명을 사용하는지 확인합니다. 예를 들어 사용자, 읽기 전용 사용자 및 관리자입니다.
파일 관리
파일을 업로드할 때 파일 헤더를 확인하여 파일 형식을 제한합니다(파일 확장자 확인은 적절하지 않음).
파일 업로드 디렉토리에 대한 실행 권한을 끕니다.
사용자가 업로드한 파일에 바이러스 및 맬웨어가 있는지 검사합니다.