2013-02-25 2 views
0

바이너리를 작성하기 위해 작성된 C++ 코드에 대한 정적 분석을 강화하려고합니다. 그러나이 빌드는 완료하는 데 수 시간 (때로는 하루 이상)이 소요됩니다.실행 파일이나 .o 파일에서 SCA 빌드를 강화하십시오.

이 문제를 해결하려면 대상으로 사용하기 위해 위조 된 아카이브를 만들어서 모든 .o 파일 만 빌드하려고했습니다. 이 접근법에서 볼 수있는 장점은 코드가 팀 소유가 아니며 빌드 할 필요가없고 링크 시간도 절약된다는 것입니다. 내가 할 때 빌드 시간면에서 엄청난 이득을보고 있습니다.

그러나 팀원 중 한 명은 오탐 (false positive) 및 위음성 (false negative)을 초래할 수 있다고 생각합니다. 이는 소유권 외부의 코드와의 상호 작용을 놓치기 때문입니다. 그가 준 예제는 소유권 외부의 라이브러리에 대한 API 호출간에 공유 된 객체에 관한 것입니다. 즉, 도메인 외부의 개체 조작을 알 수 없습니다. 그러나 모든 파일 소유자가 자신의 코드에 대해 동일한 작업을 수행 할 때 처리하지 않겠습니까?

제 접근 방식이 올바른지 알려주세요.

+0

모든 빌드에서 SCA를 실행하고 있습니까? 얼마나 자주 빌드입니까? 일반적으로 일주일에 한 번 SCA로 스캔해야합니다. – LaJmOn

+0

안녕 LaJmOn, 2 주마다 스프린트가 있기 때문에 매주 달리기가 너무 늦을 수 있습니다. 그래서 우리는 더 짧은주기를 선호합니다. 더 중요한 것은 이러한 실행을하는 동안 Fortify의 속도에 의해 제한되기를 원하지 않는다는 것입니다. –

답변

1

사용자의 접근 방식은 위양성 (false positive)을 유발할 수 있지만, 위음성이 악화 될 가능성이 높으며, 악화되거나 위험 등급이 너무 낮습니다.

데이터 흐름 분석기는 소스 (사용자 입력) 사이의 데이터 흐름 및 싱크 (위험 함수 호출)를 검출하는 전역 간 절차 더러운 증식 분석을 사용한다.

데이터 흐름 분석기가 싱크를 찾을 수 없으면 분석기는이 오염 전파를 중단하고 다른 곳으로 이동하여 취약점이 누락됩니다 (위음성).

public static void main(String args[]) throws Exception { 
    ResultSet results = SQLInj(args); 
    System.out.println(results.Password); 
} 

public static ResultSet SQLInj(String args[]) { 
    String query = "SELECT * FROM user_data WHERE last_name = '" + args[1] + "'"; 
    Statement statement = connection.createStatement(); 
    ResultSet results = statement.executeQuery(query); 
} 

소스 인 main-> 인수 [] 및 싱크 인 SQLInj->

다음의 의사 코드는 모두 PII 노출SQL 인젝션의 예 executeQuery().

SQLInj이 검색되지 않는 코드 (팀 코드 제외)에 있으면 데이터 흐름 분석기가 싱크를 찾지 못하기 때문에 SQL 주입 문제가 발견되지 않습니다. PII 노출은 시맨틱 분석기가 "암호"라는 단어를 찾음으로써 발견 될 수 있지만 훨씬 낮은 신뢰도를 부여받습니다.

+0

안녕 LaJmOn, 정확히 어떻게되는지 이해하려고합니다. 제발 이해/나를 관련 문서로 안내해주십시오. –

+0

충분한 설명 이었습니까? 또한 C++ 검사 시간을 줄이는 방법에 대한 아이디어를 보낼 수 있습니다. – LaJmOn

+0

나는 당신이 지금 말하는 것을 얻습니다. C++ 검사 시간 단축에 대한 아이디어를 보내 주실 수 있습니까? –