• Home
  • 회사소개
    • 회사개요
    • 인사말
    • 회사연혁
    • 고객사 레퍼런스
    • 협력사
    • 오시는길
  • 사업소개
    • 시큐어코딩
    • 웹방화벽
    • 교육
    • 컨설팅
  • 제품소개
    • CODE-RAY XG
    • WEBS-RAY V2.5
    • SECUI MF2
    • Secuguard
    • SolidStep
  • 보안소식
    • 보안뉴스
    • 시큐어코딩
    • 모의해킹
    • 취약점 진단
  • 공지사항
    • 공지사항
    • 납품 및 컨설팅 사례
    • 유지보수 사업 현황
    • 채용공고
    • 자료실
  • Home
  • 회사소개
    • 회사개요
    • 인사말
    • 회사연혁
    • 고객사 레퍼런스
    • 협력사
    • 오시는길
  • 사업소개
    • 시큐어코딩
    • 웹방화벽
    • 교육
    • 컨설팅
  • 제품소개
    • CODE-RAY XG
    • WEBS-RAY V2.5
    • SECUI MF2
    • Secuguard
    • SolidStep
  • 보안소식
    • 보안뉴스
    • 시큐어코딩
    • 모의해킹
    • 취약점 진단
  • 공지사항
    • 공지사항
    • 납품 및 컨설팅 사례
    • 유지보수 사업 현황
    • 채용공고
    • 자료실

시큐어코딩

  • home
  • 보안소식
  • 시큐어코딩

24. [보안 기능] 적절하지 않은 난수값 사용

2019.05.28 10:12

관리자 조회 수:705

안녕하세요 지에스인포입니다.

​

추위에 덜덜 떨던 게 얼마 전 같은데 어느덧 봄이 되었습니다.


​

저희 블로그를 방문해주신 분들도 따뜻한 봄날의 햇살을 느끼면서 주변의 소중한 사람들과 근처 공원이라도 나가서 즐거운 시간을 보내시면 좋겠습니다.

​

여러분들의 소중한 정보보안을 지켜드리기 위해 정보보호 전문기업인 저희 지에스인포는 오늘도 쉬지 않고 일하고 있답니다. 보안이 필요하시면 언제든 저희 지에스인포의 문을 두드려주세요!

​

분석 및 설계 단계 보안요구항목과 구현 단계 47개 보안약점 기준

- 소프트웨어 개발보안 가이드 (행정안전부 / 한국인터넷진흥원)

​

오늘은 행정안전부 SW 개발보안가이드 47개 항목 중 24번째인 '적절하지 않은 난수값 사용' 항목에 대해 알아보겠습니다.

​

# 적절하지 않은 난수값 사용 : 공격자가 예측 가능한 난수를 사용할 경우 SW에서 생성되는 다음 숫자를 예상하여 공격이 가능해지는 보안약점

​

프로그램에서 예측 가능한 난수를 사용하는 것은 시스템에 보안약점을 유발합니다.

​

여기서 난수란? 특정한 순서나 규칙을 가지지 않는 수를 말합니다.

영어로는 random number라고 하는데요.

아래 예시와 함께 설명을 하겠습니다.

​

1-2-3-4-5-?

​

위 수열 다음에 나올 ? 안의 숫자는 무엇일까요?

아마 대부분 어렵지 않게 '6'이라고 답하셨을 거라고 생각되는데요.

1-2-3-4-5 까지 숫자가 이어지는 동안 숫자가 1씩 증가한다는 규칙성이 있었기 때문입니다.

​

2-4-6-8-10-12-14-?

​

마찬가지로 위와 같은 숫자도 마지막에 나올 숫자가 무엇일지 예측이 어렵지 않게 가능할 것입니다.

숫자가 2씩 증가한다는 규칙이 보이기에 ? 안 에 들어갈 숫자도 14에서 2를 더하면 되기 때문이지요.

​

그렇다면 아래와 같은 경우는 어떨까요?

​

4-9-5-6-1-8-2 - ?

​

? 안에 어떤 숫자가 들어가야 하는지 감이 오시나요?

아마 이번에는 ? 안에 어떤 숫자가 들어가야 하는지 확신하기가 어려우셨을 겁니다.

왜냐하면 나열 된 수열 사이에 규칙성이 없었기 때문이죠.

​

이처럼, 난수(random number)의 경우 어떤 숫자가 나올지 예측 할 수 없다는 특징이 있습니다.

​

때문에 프로그램에서는 다양한 목적을 위해 난수를 활용하곤 하는데요.

​

예를 들면 게임에서 랜덤 아이템을 생성 하고자 할 때나, 설문조사 프로그램에서 설문조사 대상을 선정 할 때 등 무작위 값이 필요할 때 난수값은 매우 요긴하게 사용되곤 한답니다.

​

그런데 이 난수값이 SW 보안에 있어서도 매우 중요하다는 사실, 알고 계셨나요?


프로그램에서 예측 불가능한 숫자가 필요한 상황에서 예측 가능한 난수를 사용한다면, 공격자는 SW에서 생성되는 다음 숫자를 예상하여 시스템을 공격하는 것이 가능합니다.

​

따라서 이럴 경우에는 예측 불가능한 난수가 생성되도록 프로그래머가 코딩을 잘 짜야 하는데요. 난수발생기에서 시드(Seed) 를 사용하는 경우에는 예측하기 어려운 방법으로 변경하는 것이 좋습니다.

​

일반적으로 JAVA 언어에서는 java.lang.Math.random() 메소드 사용을 자제하고 java.util.Random 클래스를 사용하는 것이 좋은데요, 아래 구체적인 예시와 함께 보시면 이해가 더 빠를 것 같습니다.

적절하지 않은 난수값 사용의 위험한 사례 (JAVA)

- 소프트웨어 개발보안 가이드 (행정안전부 / 한국인터넷진흥원)

위의 소스코드의 경우, java.lang.Math 클래스의 random() 메소드에서는 seed 를 재설정 할 수 없기 때문에 다음 난수 값을 예측 할 수 있다는 보안약점이 있습니다.

​

적절하지 않은 난수값 사용의 안전한 사례 (JAVA)

- 소프트웨어 개발보안 가이드 (행정안전부 / 한국인터넷진흥원)

따라서 이처럼 java.util.Random 클래스를 사용하면 seed를 굳이 재설정 해주지 않아도 매번 예측이 어려운 난수를 생성하기 때문에 적절한 난수값을 생성하는 코딩방법에 적합하다고 할 수 있을 것입니다.

​

하나 더 예시를 들어볼까요? 이번에는 C#으로 보겠습니다!

​

적절하지 않은 난수값 사용의 위험한 사례 (C#)

- 소프트웨어 개발보안 가이드 (행정안전부 / 한국인터넷진흥원)

위 소스코드의 경우에도 System.Random 클래스의 Next 메소드를 사용시 seed를 재설정하지 않기 때문에 보안상 약점이 존재합니다.

​

적절하지 않은 난수값 사용의 안전한 사례 (C#)

- 소프트웨어 개발보안 가이드 (행정안전부 / 한국인터넷진흥원)

따라서 이처럼 Guid.NewGuid().GetHashCode() 호출을 통해 seed를 생성하고, 이를 Random 생성자에 적용 해 주면 훨씬 더 안전한 SW를 개발할 수 있답니다!

​

오늘도 흥미롭게 읽으셨나요?

​

매번 지에스인포의 블로그를 찾아주시는 분들께 감사의 말씀을 드리며, 저희는 다음에도 흥미롭고 유익한 포스팅으로 찾아뵙겠습니다 ^^

이 게시물을
  • Twitter
  • Me2day
  • Facebook
  • Delicious
목록

엮인글 0

http://gsinfo.kr/xe/SecureCoding_Board/1624/73a/trackback

댓글 0

목록
번호 제목 글쓴이 날짜 조회 수
40 03. [입력 데이터 검증 및 표현] 크로스사이트스크립트 file 관리자 2018.03.07 9211
39 06. [입력 데이터 검증 및 표현] 신뢰되지 않은 URL 주소로 자동 접속 연결 file 관리자 2018.03.26 3395
38 02. [입력 데이터 검증 및 표현] 경로조작 및 자원삽입 file 관리자 2018.03.07 2316
37 05. [입력 데이터 검증 및 표현] 위험한 형식 파일 업로드 file 관리자 2018.03.07 2250
36 11. [입력 데이터 검증 및 표현] HTTP 응답분할 관리자 2018.05.10 2230
35 07. [입력 데이터 검증 및 표현] XQuery 삽입 file 관리자 2018.03.26 2124
34 10. [입력 데이터 검증 및 표현] 크로스사이트 요청 위조 (CSRF) 관리자 2018.05.10 1870
33 04. [입력 데이터 검증 및 표현] 운영체제 명령어 삽입 file 관리자 2018.03.07 1781
32 01. [입력 데이터 검증 및 표현] SQL 삽입 file 관리자 2018.03.07 1781
31 12. [입력 데이터 검증 및 표현] 정수형 오버플로우 관리자 2018.05.10 1647
30 09. [입력 데이터 검증 및 표현] LDAP 삽입 관리자 2018.05.10 1630
29 08. [입력 데이터 검증 및 표현] Xpath 삽입 관리자 2018.05.10 1386
28 15. [입력 데이터 검증 및 표현] 포맷 스트링 삽입 관리자 2019.04.30 1307
27 20. [보안 기능] 중요정보 평문 저장 관리자 2019.04.30 1144
26 21. [보안 기능] 중요정보 평문 전송 관리자 2019.04.30 1118
25 22. [보안 기능] 하드코드 된 비밀번호 관리자 2019.04.30 1113
24 19. [보안 기능] 취약한 암호화 알고리즘 사용 관리자 2019.04.30 974
23 25. [보안 기능] 하드코드 된 암호화 키 관리자 2019.05.28 947
22 34. [에러처리] 오류메시지를 통한 정보노출 관리자 2019.07.09 750
21 29. [보안 기능] 솔트 없이 일방향 해시함수 사용 관리자 2019.06.17 725
첫 페이지 1 2 끝 페이지
쓰기
태그
보안소식
  • 보안뉴스
  • 시큐어코딩
  • 모의해킹
  • 취약점 진단
nextep banner

어플리케이션 소스코드 취약점 점검도구, CODE-RAY XG를 통해 개발 단계에서부터 소스코드의 잠재적인 취약점이 없는 건강한 소프트웨어를 구현할 수 있습니다.
웹 / 소스코드 / 서버 인프라 등 다양한 시스템의 취약점을 사전에 점검하여 여러가지 상황에서의 보안사고를 예방합니다.
모바일 시스템에 대하여 해킹에 취약한 근본적인 문제를 점검하고, 다양한 컴플라이언스를 기반으로 한 최적의 가이드를 제공합니다.
  • Home
  • 회사소개
  • 사업소개
  • 제품소개
  • 보안소식
  • 공지사항
본사주소 : 서울특별시 구로구 디지털로33길 48, 709호(대륭포스트타워 7차)   Tel : 02-861-6373

대표이사 : 고공석 ㅣ  사업자번호 : 887-86-00041 ㅣ  COPYRIGHT ⓒ GSinfo ALL RIGHT RESERVED.

로그인

로그인폼

로그인 유지

로그인
  • 회원가입
  • ID/PW 찾기