발생원인
중요한 민감한 데이터를 디스크에 저장하거나 외부 전송 시, 소프트웨어가 해당 데이터를 암호화하지 않을 경우 민감한 데이터가 노출될 수 있다.
안전한 코딩 방법
계좌번호, 신용카드번호, 패스워드 정보가 디스크에 출력 시 단반향 암호화 알고리즘을 사용하고, 해쉬 알고리즘은 SHA-256을 사용한다.
소프트웨어 설계 시 민감한 데이터와 일반 데이터를 가능한 분리하도록 한다.
민감한 데이터가 네트워크를 통해 전송될 때, SSL 또는 HTTPS 등과 같은 Secure Channel을 사용한다
안전하기 않은 코드의 예 - JAVA |
void foo() { try { Socket socket = new Socket("taranis", 4444); PrintWriter out = new PrintWriter(socket.getOutputStream(), true); String password = getPassword(); out.write(password); } catch (FileNotFoundException e) { ... |
패스워드를 암호화 없이 소켓을 통해 전송 |
안전한 코드의 예 - JAVA |
void foo() { try { Socket socket = new Socket("taranis", 4444); PrintStream out = new PrintStream(socket.getOutputStream(), true); Cipher c = Cipher.getInstance("AES/CBC/PKCS5Padding"); String password = getPassword(); encryptedStr= c.update(password.getBytes()); out.write(encryptedStr,0,encryptedStr.length); } catch (FileNotFoundException e) { |
패스워드를 암호화 한 뒤 소켓을 통해 전송 |
'보안 > 시큐어코딩' 카테고리의 다른 글
[시큐어코딩-21] 보안기능(7) 충분하지 않은 키 길이 사용 (0) | 2012.10.28 |
---|---|
[시큐어코딩-20] 보안기능(6) 하드코드된 패스워드 (0) | 2012.10.28 |
[시큐어코딩-18] 보안기능(4) 취약한 암호화 알고리즘 사용 (0) | 2012.10.28 |
[시큐어코딩-17] 보안기능(3) 중요한 자원에 대한 잘못된 권한 설정 (0) | 2012.10.28 |
[시큐어코딩-16] 보안기능(2) 부적절한 인가 (0) | 2012.10.28 |