보안 코딩

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에서 제공하는 소프트웨어 개발 보안 가이드

https://www.kisa.or.kr/public/laws/laws3_View.jsp?cPage=6&mode=view&p_No=259&b_No=259&d_No=88&ST=T&SV=

싱가폴 정부 DevSecOps 지침에서 보안코딩 부분

OWASP의 Secure Coding Practices 가이드를 간략히 요약한 내용임

https://docs.developer.tech.gov.sg/docs/devsecops-playbook/development

다음은 기관에서 통합할 것을 권장하는 몇 가지 중요한 보안 코딩 관행입니다. 이 목록이 완전한 것은 아닙니다.

입력 유효성 검사

  • 매개변수, 헤더, URL과 같은 클라이언트의 모든 입력 데이터를 검증합니다.

  • 데이터 유형, 데이터 범위, 길이를 확인하거나 각 데이터 입력에 대해 정규식(정규식)을 사용합니다.

  • 가능하면 블랙리스트보다 화이트리스트를 구현하십시오.

인증 및 비밀번호 관리

  • 독점 서비스를 구현하는 대신 SGTS에서 제공되는 Singpass 또는 Corppass와 같은 중앙 인증 서비스를 사용하는 것이 좋습니다.

  • 기관이 중앙 인증 서비스를 사용할 수 없는 경우 최소한 암호가 응용 프로그램에서만 읽고 쓸 수 있는 테이블에 암호학적으로 강력한 단방향 솔티드 해시로 저장되어 있는지 확인해야 합니다.

  • 암호 복잡성/길이/비재사용/만료 모범 사례를 구현하는 것이 좋습니다.

  • 로그인 시도가 10회 연속 실패하면 계정을 비활성화합니다.

세션 관리

  • 각 인증에 대해 새 세션 식별자를 생성하고 애플리케이션에 적합한 세션 만료 및 비활성 시간 초과를 구현합니다.

  • 동일한 사용자 계정으로 동시 로그인을 허용하지 말고 동시 로그인이 있어야 하는 비즈니스 요구 사항이 없는 한 이전 세션을 취소하십시오.

액세스 제어

  • 정기적으로 계정을 감사하고 비활성 계정을 비활성화하고 세션 식별자를 취소합니다.

  • 승인된 사용자가 모든 제한된 리소스에 대한 적절한 액세스 제어를 활성화하고 제한된 리소스에 대한 기본 거부 접근 방식을 사용합니다.

오류 처리 및 로깅

오류는 종종 미래의 취약점으로 이어질 수 있는 시스템의 버그를 나타냅니다.

  • 모든 오류 및 예외를 해결합니다. 또한 코드의 최상위 수준에 위치하는 전역 예외가 있을 수 있어 길 잃은 예외를 포착할 수 있습니다.

  • 오류 응답에 디버깅, 스택 추적 또는 민감한 정보를 표시하지 마십시오.

  • 민감한 정보를 로그에 저장하지 말고 권한이 있는 사람만 로그에 액세스할 수 있도록 제한하십시오.

  • 진단 및 향후 완화를 위해 적절한 세부 정보와 함께 오류를 기록합니다.

  • 신뢰할 수 있는 시스템에 오류 로그를 저장합니다.

시스템 설정

  • HTTP 응답 헤더에서 불필요한 시스템 정보를 제거하십시오.

  • 배포 중에 프로덕션용이 아닌 테스트 코드 또는 기능을 제거하십시오.

  • 별도의 환경에 대해 별도의 구성 파일을 유지 관리합니다.

  • 구성 파일에 비밀이나 민감한 정보를 보관하지 마십시오. AWS Secrets Manager와 같은 비밀 관리 서비스에 보관하십시오.

데이터베이스 보안

  • 강력한 형식의 매개변수화된 쿼리를 사용합니다.

  • 응용 프로그램이 데이터베이스에 액세스할 때 가장 낮은 수준의 권한을 사용하는지 확인합니다.

  • 애플리케이션이 서로 다른 신뢰 구분에 대해 서로 다른 자격 증명을 사용하는지 확인합니다. 예를 들어 사용자, 읽기 전용 사용자 및 관리자입니다.

파일 관리

  • 파일을 업로드할 때 파일 헤더를 확인하여 파일 형식을 제한합니다(파일 확장자 확인은 적절하지 않음).

  • 파일 업로드 디렉토리에 대한 실행 권한을 끕니다.

  • 사용자가 업로드한 파일에 바이러스 및 맬웨어가 있는지 검사합니다.