코드감사

Code audit

소프트웨어 코드 감사는 버그, 보안 위반 또는 프로그래밍 규약 위반을 발견하기 위한 목적으로 프로그래밍 프로젝트의 소스 코드를 종합적으로 분석하는 것이다.소프트웨어가 출시되기 전에 오류를 줄이려는 방어적 프로그래밍 패러다임의 핵심 부분이다.Python과 같은 많은 상위 언어들은 잠재적으로 취약한 함수(예를 들어 경계를 확인하지 않는 함수)가 적기 때문에 C와 C++ 소스 코드는 감사해야 할 가장 일반적인 코드다.[citation needed]

지침

소프트웨어를 감사할 때, 모든 중요한 요소들은 전체 프로그램과 별도로 그리고 함께 감사되어야 한다.고위험 취약점을 먼저 검색해 저위험 취약점에 대한 대책을 강구하는 것이 좋다.일반적으로 고위험과 저위험 사이의 취약성은 상황 및 문제의 소스 코드가 어떻게 사용되고 있는지에 따라 존재한다.응용 프로그램 침투 테스트는 응용 프로그램을 다운시키기 위해 가능한 접근 지점에서 가능한 많은 알려진 공격 기법을 실행하여 소프트웨어의 취약성을 식별하려고 한다.[1]이는 일반적인 감사 방법으로, 특정 취약성이 존재하는지 여부를 알아내는 데 사용할 수 있지만, 소스 코드에서 어디에 있는지 알 수는 없다.일부에서는 주기 종료 감사 방법이 개발자를 압도하는 경향이 있어 궁극적으로 팀은 알려진 문제의 목록이 많지만 실제 개선은 거의 없다고 주장한다. 이러한 경우 대안으로 인라인 감사 접근법을 추천한다.

고위험 취약성

다음과 같은 사용으로 인해 일반적인 고위험 취약성이 존재할 수 있다.

  • 버퍼 오버플로 취약성을 유발할 수 있는 비 Bounds-checking 기능(: strcpy, sprintf, vsprintf, sscanf)
  • 이후 범위 검사를 방해할 수 있는 버퍼의 포인터 조작(예: if ((bytesread = net_read(buf,len)) > 0) buf += bytesread; [2]
  • 실행()과 같은 호출, 실행 파이프, 시스템() 및 유사한 호출, 특히 정전기적 인수로 호출될 때
  • 입력 유효성 검사(예: (SQL):statement := "SELECT * FROM users WHERE name = '" + userName + "';"SQL 주입 취약성의 예임
  • 파일 포함 기능(예: (PHP):include($page . '.php');원격 파일 포함 취약성의 예임
  • 악성 코드로 연결할 수 있는 라이브러리의 경우 내부 변이 가능한 데이터 구조(레코드, 어레이)에 대한 참조를 반환하십시오.악의적인 코드는 구조를 수정하거나 미래의 변화를 관찰하기 위해 참조를 유지하려고 할 수 있다.

저위험 취약성

다음은 코드를 감사할 때 찾아내야 할 저위험 취약성 목록이지만, 높은 위험 상황을 초래하지는 않는다.

  • 서버 측에 영향을 미치지 않는 클라이언트측 코드 취약성(예: 사이트스크립팅)
  • 사용자 이름 열거
  • 디렉터리 트래버설
  • 중요한 API 키

도구들

소스 코드 감사 도구는 일반적으로 일반적인 취약점을 찾고 특정 프로그래밍 언어에서만 작동한다.이러한 자동화된 도구는 시간을 절약하는 데 사용될 수 있지만 심층적인 감사에 의존해서는 안 된다.정책 기반 접근법의 일부와 같은 도구를 적용하는 것이 권장된다.[3]

요구 사항에 대한 의존성

낮은 임계값으로 설정하면 대부분의 소프트웨어 감사 도구는 특히 이전에 코드를 감사하지 않은 경우 많은 취약성을 탐지한다.그러나 이러한 경고의 실제 중요성은 응용 프로그램의 사용 방법에 따라 달라진다.악의적인 코드와 연계될 수 있는 (그리고 그것에 대해 면역이 되어야 하는) 도서관은 시스템을 깨려는 의도적인 시도가 예상되기 때문에 반환된 모든 데이터 구조를 복제하는 것과 같은 매우 엄격한 요건을 가지고 있다.악성 입력(웹 서버 백엔드 등)에만 노출될 수 있는 프로그램은 먼저 이 입력(버퍼 오버런, SQL 주입 등)에 대해 주의를 기울여야 한다.그러한 공격은 보호된 기반구조에서 인가된 사용자가 내부적으로만 사용하는 프로그램에 대해 결코 발생하지 않을 수 있다.

참고 항목

참조

  1. ^ "Source Code Audit - FAQ". Archived from the original on 2009-02-10. Retrieved 2008-02-12.
  2. ^ a b c "Guidelines for C source code auditing". Archived from the original on 2008-03-28. Retrieved 2008-02-12.
  3. ^ 웨인 아리롤라(SearchSoftwareQuality.com, 2008년 9월 22일)의 "SDC 말기의 정적 분석웨이백머신보관된 2010-10-15"