본문 바로가기
about Security/SECURE CODING

[보안기능] 중요정보 평문저장 (3등급)

by saniii 2021. 8. 7.

 

0. 개요 

 

개인정보, 인증정보, 금융정보와 같은 중요 데이터를 암호화하여 저장하지 않아 제대로 보호되지 않을 경우,

보안이나 데이터의 무결성을 잃을 수 있다.

 

프로그램이 개인정보, 인증 정보등의 사용자 중요정보 및 시스템 중요 정보를 처리하는 과정에서

이를 평문으로 저장할 경우 공격자에게 민감한 정보가 노출될 수 있다.

 

 

1. 보안 대책

 

 - 개인정보, 금융정보, 패스위드 등 중요정보를 저장할 때는 반드시 암호화하여 저장한다.

   : 서버의 DB나 파일 등에 저장되는 중요정보는 반드시 암호화한다.

   : 안전한 암호알고리즘과 암호기키를 적용한다. (보안요구항목)

 

 - 중요정보를 읽거나 쓸 경우에 권한인증 등을 통해 적합한 사용자만이 중요정보에 접근하도록 한다.

   : 설계 단계부터 주요정보가 다뤄지는 안전영역을 설정하고 해당 영역 외부로 누출되지 않도록 한다.

   : 쿠키, HTML5 로컬저장소와 같은 클라이언트 측 하드 드라이브에는 중요정보가 저장되지 않도록 설계

   : 반드시 클라이언트 측에 저장해야하는 민감한 정보라면 암호화하여 저장한다.

   : 중요한 로직 및 주석 처리는 서버 측 언어에서만 처리되도록 설계

     (클라이언트 언어는 사용자에게 공개되어 있음)

 

 

2. 진단 방법

 

- 로그인 처리 혹은 계정 생성시에 암호화 로직을 사용하는지 확인한다.

- 중요 정보에 불필요한 참조가 존재하는지 확인한다.

- 중요 정보를 임시변수에 저장할 때 사용 후 초기화하는지 확인한다.

 

 

3. 코드 예시

 

# 1  -  중요 정보 평문 저장 - 안전하지 않은 코드 예시(JAVA)

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

입력받은 패스워드값을 암호화없이 DB에 저장하고 있다.

암호화하는 과정을 덧붙여 안전한 코드로 만들자.

 

# 1  +  중요 정보 평문 저장 - 안전한 코드 예시(JAVA)

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

 

 

# 2  -  중요 정보 평문 저장 - 안전하지 않은 코드 예시(JAVA)

속성 파일에서 읽어들인 패스워드를 암호화없이 네트워크를 통하여 서버에 전송하고 있다.

>> 패킷 스니핑을 통해 패스워드를 탈취할 수 있다.

 

JAVA 보안 개발 가이드 -

JAVA 보안 개발 가이드 1절. 입력 데이터 검증 및 표현 1. 크로스 사이트 스크립트 공격 취약점(XSS) 가. 정의 외부에서 입력되는 검증되지 않은 입력이 동적 웹페이지의 생성에 사용될 경우, 전송된

wiki.wikisecurity.net

 

# 2  +  중요 정보 평문 저장 - 안전한 코드 예시(JAVA)  

역시 읽어들인 패스워드를 암호화하여 전송하도록 한다.

 

 

# 3  -  중요 정보 평문 저장 - 안전하지 않은 코드 예시(JAVA)

일반 텍스트 사용자 계정 ID를 브라우저 쿠키에 저장.
계정 ID가 일반 텍스트이기 때문에 공격자에 의해 컴퓨터가 손상되면 사용자의 계정 정보가 노출된다.

https://cwe.mitre.org/data/definitions/312.html

암호화하여 저장하도록 하자.

 

 

# 4  -  중요 정보 평문 저장 - 안전하지 않은 코드 예시(JAVA)

https://wiki.sei.cmu.edu/confluence/display/java/MSC03-J.+Never+hard+code+sensitive+information%20 

 

MSC03-J. Never hard code sensitive information - SEI CERT Oracle Coding Standard for Java - Confluence

Hard coding sensitive information, such as passwords, server IP addresses, and encryption keys can expose the information to attackers. Anyone who has access to the class files can decompile them and discover the sensitive information. Leaking data protect

wiki.sei.cmu.edu

 

 

 

4. 해당 취약점 CASE

 

- 소켓으로 전달받은 패스워드를 파일에 암호화하지 않고 직접 기록할 경우

- 소켓으로 전달받은 패스위드를 버퍼에 임시로 저장 후 사용 종료시 초기화하지 않을 경우

- 설정 파일에 DB 접속 계정 정보가 평문으로 저장되어 있는 경우

- 쿠키값에 사용자의 계정이 평문으로 저장되도록 되어있는 경우

 

 

 

#. 참고 블로그 

https://blog.naver.com/PostView.naver?blogId=gs_info&logNo=221479972783&parentCategoryNo=&categoryNo=16&viewDate=&isShowPopularPosts=false&from=postView 

 

[시큐어코딩] 보안 기능 - 중요정보 평문 저장

안녕하세요, 지에스인포입니다. 오늘은 행안부 개발보안 가이드라인 47개 항목 중 "중요정보 평문 저...

blog.naver.com

https://prokyhsigma.tistory.com/57?category=848515 

 

[구현보안] 보안기능 05 - 중요정보 평문저장

가. 원인 - 패스워드 / 개인정보 / 인증정보 / 금융정보 등의 중요정보를 암호화하지 않고 평문으로 저장 나. 영향 - 저장된 파일이나 DB정보가 유출될 경우, 개인정보, 패스워드 등의 중요정보 및

prokyhsigma.tistory.com

 

 

 

댓글