전자금융기반시설 (웹, 모바일)

고정된 인증정보 이용

서쪽곰 2023. 6. 7. 22:50

목 차

     

    평가항목ID WEB-SER-005, MOB-SER-005 위험도 5
    통제구분 5.8.5 (일반공통) 이용자 인증 평가항목 고정된 인증정보 이용
    상세설명 o SMS 등 이용자 인증을 위해 생성되는 값에 대해 인증정보 탈취 방지를 위해 가변적인 데이터 사용 여부를 점검
    * (평가 예시)
    - SMS, ARS 등 이용자 인증 시 매번 동일한 인증코드 생성 여부 점검 등

     

    고정된 인증정보 이용

    SMS 등 이용자 인증을 위해 생성되는 값이 고정된 값일 경우 인증코드 유출 시 공격자가 이를 이용하여 도용이 발생할 수 있으므로 가변적인 데이터를 사용해야 합니다.

     

    이용자 인증정보는 세션정보와 1회성 인증정보로 분류할 수 있습니다.

    분류 대상 위험
    세션정보 - 세션ID
    - SSO
    세션 토큰
    세션 정보(세션ID, SSO인증토큰)의 재사용이 가능할 경우 악의적인 사용자는 XSS 등의 기법을 이용하여 타 사용자의 세션정보를 탈취한 후 해당 사용자의 권한이나 계정을 도용할 수 있음
    1회성
    인증정보
    - SMS/ARS 인증번호
    - OTP
    - CSRF 
    토큰
    1회성 인증정보의 재사용이 가능할 경우 인증 절차를 변조하여 상품 구매 및 자금이체 등 거래의 중복 요청, 또는 금액변조, 계좌번호 변조 등 거래 정보의 변조가 발생할 수 있음

     

    해결방안

    기본적으로 WAS에서 발행하는 세션ID는 항상 무작위 문자열로 발급되므로 세선ID가 고정된 값으로 사용될 가능성은 없으며, 1회성 인증정보의 경우 일정시간이 경과하거나 사용을 완료한 경우 폐기하여 재사용될 수 없도록 조치해야 합니다.

     

    또한, 컴퓨터의 난수발생기는 난수 값을 결정하는 시드(Seed) 값이 고정될 경우, 매번 동일한 난수값이 발생합니다. 이를 최대한 피하기 위해 Java에서는 Random()과 Math.random() 사용 시 java.util.Random 클래스에서 기본값으로 현재시간을 기반으로 조합하여 매번 변경되는 시드(Seed) 값을 사용하며, C에서는 rand() 함수 사용 시 매번 변경되는 기본 시드(Seed) 값이 없으므로, srand()로 매번 변경되는 현재시간 기반 등으로 시드(Seed) 값을 설정하여야 합니다.


    그러나 세션 ID, 암호화키 등 보안결정을 위한 값을 생성하고 보안결정을 수행하는 경우에는, Java에서 Random()과 Math.random()을 사용하지 말아야 하며, 예측이 거의 불가능하게 암호학적으로 보호된 java.security.SecureRandom 클래스를 사용하는 것이 안전합니다.

     

    소프트웨어 개발보안 가이드_JAVA

     

    반응형