SW/정보보호

보안 코드 검토 모범 사례

얇은생각 2024. 1. 2. 07:30
반응형

이 문서에서는 소프트웨어의 취약성을 줄이는 방법을 설명합니다. 수동 및 자동 보안 코드 검토를 모두 수행하는 것이 중요합니다.

코드 리뷰는 소프트웨어의 품질에 대한 문제를 식별하는 데 도움을 줄 수 있는 개발 프로세스의 중요한 부분입니다. 보안 코드 리뷰는 소프트웨어의 소스 코드의 보안을 구체적으로 평가하는 특정 유형의 코드 리뷰입니다. 소스 코드를 포함하지 않는 활동(DAST 도구 및 펜 테스트와 같은) "보안 코드 리뷰"로 간주되지 않습니다

보안 코드 리뷰의 일부 단계는 자동화된 도구에 의해 도움을 받을 수 있지만, 많은 사람들은 실제 프로세스에 대한 비판적 사고와 이해를 위해 사람이 필요합니다. 이 게시물에서는 보안 코드 리뷰 중에 여러분이 해야 할 다양한 작업을 살펴보고, 그 중 어떤 것이 자동화될 수 있는지 지적한 다음, 여러분 자신의 보안 코드 리뷰를 수행할 때 참고할 수 있도록 모든 것을 치트 시트로 요약할 것입니다!

 

 

보안 코드 검토 모범 사례

 

 

자동화된 보안 코드 검토 도구

먼저 보안 코드 리뷰에서 자동화할 수 있는 부분을 살펴보도록 하겠습니다. 최신 코드 보안 툴을 사용하면 낮은 수준의 과즙을 신속하게 찾을 수 있고, 높은 수준의 보안 문제에 집중할 수 있습니다. 자동화 툴을 사용하면 프로세스의 일부가 일관적이고 신속한지 확인할 수 있습니다.

 

 

SAST 도구

정적 응용 프로그램 보안 테스트(SAST) 도구는 다양한 자동화된 방법론을 통해 소스 코드를 분석하여 몇 가지 종류의 취약성을 찾습니다. SAST 도구는 주입 공격, 버퍼 오버플로우, 잘못된 설정 등에 대해 코드가 취약한지 여부를 파악하는 데 능숙합니다. SAST 도구의 또 다른 장점은 종종 IDE에서 바로 실행되어 코드를 작성할 때 즉각적인 피드백을 제공할 수 있다는 것입니다. 일부 SAST 도구는 구성 파일을 사용자의 인프라스트럭처 as-code에 대해 검색할 수도 있는데, 이는 그 자체로 큰 주제입니다.

인기 있는 SAST 도구의 몇 가지 예는 다음과 같습니다:

소나르 큐베

베라코드

스닉 코드

시놉시스

 

 

비밀 검색

우리는 자동화할 수 있는 보안 코드 리뷰의 또 다른 부분인 코드에서 비밀을 탐지하는 데 열정을 가지고 있습니다. 깃가디언의 플랫폼은 비밀이 코드에 노출되었을 때 실시간으로 탐지하는 기능을 제공하며, 이로 인해 깃허브 마켓플레이스의 보안 앱 1위를 차지하고 있습니다.

다른 SAST 도구와 마찬가지로 비밀 스캔 소프트웨어도 개발 프로세스의 초기 부분에 통합되어 비밀이 깃 히스토리에 들어가기도 전에 잡을 수 있습니다. 깃가드는 ggshield라는 오픈 소스 도구를 제공하며, 이 도구를 사전 커밋 후크로 실행할 수 있도록 구성할 수 있습니다. 이를 설정하는 방법에 대한 자세한 내용은 여기에서 확인할 수 있습니다.

 

 

SCA

자동화된 도구가 쉽게 만드는 보안 코드 검토에서 매우 까다로운 부분은 소프트웨어 구성 분석(SCA)입니다.

SCA 툴은 코드에서 사용 중인 타사 컴포넌트를 살펴보고 알려진 취약점이 있으면 알려줍니다. 코드의 모든 종속성 버전을 추적해야 한다면 많은 시간이 걸릴 것입니다. 새로운 취약점이 항상 나오면서 주기적으로 모든 것을 검토해야 하는 것은 말할 것도 없습니다. SCA 툴은 이런 종류의 보안 코드 검토를 바로 해주고 다른 것에 집중할 수 있게 해줍니다.

일부 인기 있는 SCA 도구는 다음과 같습니다:

GitHub 종속 로봇

Snyk 오픈 소스

시놉시스 블랙 덕

 

 

수동 보안 코드 검토

이제 보안 코드 검토를 신속하게 개선할 수 있는 몇 가지 도구를 살펴보았으므로 프로그램적으로 찾기 어려운 보안 문제를 다룰 것입니다. 이러한 보안 문제를 검토하려면 각 문제의 복잡성을 이해하는 개발자의 눈이 필요합니다.

 

 

유지보수성 및 복잡성

이것은 보안 코드 리뷰에서 일반 코드 리뷰와 중복되는 부분 중 하나입니다. 코드가 지나치게 복잡하고 장기적인 유지가 어려울 경우 모든 종류의 문제를 발생시킬 수 있습니다. 코드를 이해하기 어려울 때 버그와 잠재적인 취약점이 프로덕션 단계로 빠져들게 할 가능성이 더 높습니다. 설상가상으로 버그나 취약점이 빠져 나오면 수정하는 데 시간이 더 오래 걸릴 수 있습니다. 코드 리뷰어로서 복잡한 코드를 찾고 일부 코드를 식별할 때 단순화하기 위한 제안을 해야 합니다.

 

새로운 종속성

기존 종속성의 취약성을 모니터링하는 방법에 대해서는 이미 설명했지만 코드에 새로운 종속성을 추가할 때 비판적인 생각을 해보는 것도 좋습니다. 패키지에 장기적으로 의존하려면 다음과 같은 몇 가지 주요 영역을 고려해야 합니다:

인기: 패키지가 인기가 많을수록 사람들이 패키지 유지에 투자할 가능성이 높아집니다.

보안: 패키지에 취약성 및 잘못된 코딩 관행이 있는 경우 소프트웨어에서 사용하는 것이 안전하지 않음을 나타낼 수 있습니다.

유지보수: 패키지가 적극적으로 유지보수되고 버그를 수정한 실적이 있는지 확인해야 합니다.

 

 

비즈니스 로직 결함

SAST 도구는 인젝션 공격과 같은 일부 유형의 취약성을 감지하는 데는 능숙하지만 비즈니스 논리 결함을 감지하는 데는 그다지 능숙하지 않습니다. 이러한 유형의 취약성은 입력 유형과 관련이 없으며 입력의 의미와 관련이 있습니다. 이러한 유형의 취약성은 의도한 대로 작동하는 것처럼 보일 수 있지만 공격자가 이를 악용하여 예기치 않은 행동을 생성할 수 있습니다. 비즈니스 논리 결함은 소프트웨어의 목적에 따라 매우 다르므로 관련 데이터와 프로세스를 이해하는 사람이 필요합니다. 비즈니스 논리 결함에 대한 자세한 내용을 읽고 여기에서 예를 살펴볼 수 있습니다.

 

 

적절한 암호화 사용

암호화는 애플리케이션의 중요한 부분이며, 암호화의 사용(또는 암호화 부족)을 평가하기 위해서는 사용자 검토자의 지식이 필요합니다.

리뷰어는 코드에서 데이터를 데이터베이스나 파일에 저장하거나 네트워크를 통해 데이터를 주고 받는 부분을 자세히 살펴야 합니다. 암호화 사용을 평가할 때도 데이터 흐름도가 도움이 될 수 있습니다.

 

오류 처리

애플리케이션 보안에 대해 생각하면 오류 처리가 가장 먼저 떠오르지는 않지만 때로는 문제가 될 수 있습니다. 소프트웨어에 오류가 발생하면 일반적으로 사용자를 위해 일종의 메시지를 생성하지만, 이 메시지는 잘 알려지지 않은 것부터 노출되는 것까지 세부적으로 다양합니다. 오류 메시지가 너무 노출되면 소프트웨어 작동 방식에 대한 자세한 정보가 노출될 수 있으므로 악의적인 해커가 이를 악용하는 방법을 찾는 데 도움이 될 수 있습니다. 일반적으로 사용자 대면 오류 메시지는 단순하게 유지하고 개발자의 눈에만 사용할 수 있도록 더 자세한 정보는 뒤에 보관하는 것이 가장 좋습니다. 리뷰어는 오류 메시지가 너무 노출되지 않도록 해야 하며, 응용 프로그램이 오류를 처리해야 하는 모든 장소에서 오류를 처리하는지 확인해야 합니다.

 

결론

보안 코드 검토를 수행할 때 여러 가지를 살펴봤습니다. 소프트웨어의 취약성을 줄이는 것은 코드에서 시작되는데, 이는 보안 코드 검토가 소프트웨어 개발 프로세스의 중요한 부분이라는 것을 의미합니다. 자동화된 도구를 사용하면 시간과 노력을 일부 줄일 수 있지만 코드를 검토할 때는 치트 시트를 편리하게 사용하고 이 모든 영역을 평가해야 합니다.

반응형