2017-09-25 4 views
1

HP Fortify SCA가보고하는 문제에 대한 해결책을 찾는 데 문제가 있습니다. 이보고 문제는 다음과 같습니다HP 포지티브 포지티브 하드 코딩 된 암호 강화 - Java

금지 된 암호가 쉽게 해결 될 수없는 방식으로 시스템 보안을 손상시킬 수 있습니다.

코드는 다음과 유사합니다 포티이 하드 코드 된 암호입니다 생각하는 이유

@Configuration 
public class MySpringConfig { 

    private final String userName; 

    private final String password; 

    @Autowired 
    public MySpringConfig(
      @Value("${my.userName}") final String userName, 
      @Value("${my.password}") final String password) { 
     this.host = host; 
     this.userName = userName; 
     this.password = password; 
    } 
    ... 
} 

나는 이해할 수 없다. 비밀번호는 생성자에 매개 변수로 전달되며, 스프링 @Value에서 가져옵니다.

나는이 거짓 긍정을 막기 위해 @FortifyNotPassword을 사용하는 것으로 생각했지만 이것은 실제로 암호입니다. 나는이 필드의 값을 기록하는 것과 같은 실제 문제를 놓칠 수 있기 때문에 주석을 사용하지 않을 것입니다.

답변

1

Fortify는 도구가 사람처럼 똑똑하지 않기 때문에 하드 코드 된 비밀번호라고 생각합니다! 코드 검토 자로 만나는 가장 빈번한 오탐 중 하나입니다.

요새화는 사람 코드 감사 자없이 자동화 된 방식으로 사용하면 안됩니다. Fortify는 코드 검토자가 코드 검토자를 대체하지 않고 흥미로운 것을 보도록 도와줍니다. 코드 검토자는이 문제를 수동으로 숨기거나 필터링해야합니다.

자동화 솔루션을 원할 경우 요주의는 너무 많은 가양 성을 유발하기 때문에 올바른 도구가 아닙니다.

1

요새 요새화가 그렇게 똑똑하지 않다는 사실입니다. 불만은 "password"가 문자열 @Value("${my.password}")에 나타난 사실과 관련이있는 것으로 나타났습니다. 단순히 @Value("${my.value}")으로 변경하면 오류가 사라집니다.

필드에 저장되었다는 사실과도 관련이 있습니다. 결국, 클래스를 재정렬하고 위반이 사라졌습니다.

@Configuration 
public class MySpringConfig { 

    @Bean 
    public MyBean myBean(
      @Value("${my.userName}") final String userName, 
      @Value("${my.password}") final String password) { 
     return new MyBeanThatNeedsUserCredentials(userName, password); 
    } 

} 
0

Fortify는 다른 분석기를 사용합니다. 이 경우 의미 분석기가 사용 된 것처럼 보입니다. 단순히 "암호"라는 grep 일뿐입니다. 따라서이 경우를 거짓 긍정으로 평가할 수 있습니다. 시맨틱 분석기는 매우 시끄러운 경향이 있습니다.

AuditWorkbench를 사용하는 경우 요약 탭에서 (찾기를 클릭 한 후) 어떤 엔진이 문제를 찾는데 사용되었는지 확인할 수 있습니다. 그것은 패널의 오른쪽에 있습니다.

관련 문제