0. 개요
개인정보, 인증정보, 금융정보와 같은 중요 데이터를 암호화하여 저장하지 않아 제대로 보호되지 않을 경우,
보안이나 데이터의 무결성을 잃을 수 있다.
프로그램이 개인정보, 인증 정보등의 사용자 중요정보 및 시스템 중요 정보를 처리하는 과정에서
이를 평문으로 저장할 경우 공격자에게 민감한 정보가 노출될 수 있다.
1. 보안 대책
- 개인정보, 금융정보, 패스위드 등 중요정보를 저장할 때는 반드시 암호화하여 저장한다.
: 서버의 DB나 파일 등에 저장되는 중요정보는 반드시 암호화한다.
: 안전한 암호알고리즘과 암호기키를 적용한다. (보안요구항목)
- 중요정보를 읽거나 쓸 경우에 권한인증 등을 통해 적합한 사용자만이 중요정보에 접근하도록 한다.
: 설계 단계부터 주요정보가 다뤄지는 안전영역을 설정하고 해당 영역 외부로 누출되지 않도록 한다.
: 쿠키, HTML5 로컬저장소와 같은 클라이언트 측 하드 드라이브에는 중요정보가 저장되지 않도록 설계
: 반드시 클라이언트 측에 저장해야하는 민감한 정보라면 암호화하여 저장한다.
: 중요한 로직 및 주석 처리는 서버 측 언어에서만 처리되도록 설계
(클라이언트 언어는 사용자에게 공개되어 있음)
2. 진단 방법
- 로그인 처리 혹은 계정 생성시에 암호화 로직을 사용하는지 확인한다.
- 중요 정보에 불필요한 참조가 존재하는지 확인한다.
- 중요 정보를 임시변수에 저장할 때 사용 후 초기화하는지 확인한다.
3. 코드 예시
# 1 - 중요 정보 평문 저장 - 안전하지 않은 코드 예시(JAVA)
입력받은 패스워드값을 암호화없이 DB에 저장하고 있다.
암호화하는 과정을 덧붙여 안전한 코드로 만들자.
# 1 + 중요 정보 평문 저장 - 안전한 코드 예시(JAVA)
# 2 - 중요 정보 평문 저장 - 안전하지 않은 코드 예시(JAVA)
속성 파일에서 읽어들인 패스워드를 암호화없이 네트워크를 통하여 서버에 전송하고 있다.
>> 패킷 스니핑을 통해 패스워드를 탈취할 수 있다.
# 2 + 중요 정보 평문 저장 - 안전한 코드 예시(JAVA)
역시 읽어들인 패스워드를 암호화하여 전송하도록 한다.
# 3 - 중요 정보 평문 저장 - 안전하지 않은 코드 예시(JAVA)
일반 텍스트 사용자 계정 ID를 브라우저 쿠키에 저장.
계정 ID가 일반 텍스트이기 때문에 공격자에 의해 컴퓨터가 손상되면 사용자의 계정 정보가 노출된다.
암호화하여 저장하도록 하자.
# 4 - 중요 정보 평문 저장 - 안전하지 않은 코드 예시(JAVA)
https://wiki.sei.cmu.edu/confluence/display/java/MSC03-J.+Never+hard+code+sensitive+information%20
4. 해당 취약점 CASE
- 소켓으로 전달받은 패스워드를 파일에 암호화하지 않고 직접 기록할 경우
- 소켓으로 전달받은 패스위드를 버퍼에 임시로 저장 후 사용 종료시 초기화하지 않을 경우
- 설정 파일에 DB 접속 계정 정보가 평문으로 저장되어 있는 경우
- 쿠키값에 사용자의 계정이 평문으로 저장되도록 되어있는 경우
#. 참고 블로그
https://prokyhsigma.tistory.com/57?category=848515
'about Security > SECURE CODING' 카테고리의 다른 글
[보안 기능] 취약한 암호화 알고리즘 사용 (4등급) (0) | 2021.08.07 |
---|---|
[입력 데이터 검증 및 표현] 정수형 오버플로우 (4등급) (0) | 2021.08.07 |
[입력 데이터 검증 및 표현] 위험한 형식 파일 업로드 (3등급) (0) | 2021.08.07 |
[입력 데이터 검증 및 표현] HTTP 응답분할 (3등급) (0) | 2021.08.07 |
[캡슐화] 제거되지 않고 남은 디버그 코드 (3등급) (0) | 2021.08.07 |
댓글