본문 바로가기

보안/시큐어코딩

[시큐어코딩-19] 보안기능(5) 사용자 중요정보 평문저장(또는 전송)

발생원인


     중요한 민감한 데이터를 디스크에 저장하거나 외부 전송 시, 소프트웨어가 해당 데이터를 암호화하지 않을 경우 민감한 데이터가 노출될 수 있다.

 

안전한 코딩 방법


     계좌번호, 신용카드번호, 패스워드 정보가 디스크에 출력 시 단반향 암호화 알고리즘을 사용하고, 해쉬 알고리즘은 SHA-256을 사용한다.

      -SHA(Secure Hash Algorithm : 안전한 해시 알고리즘)
-SHA 함수들은 서로 관련된 암호학적 해시 함수들의 모음
-미국 국가 안전 보장국(NSA)1993년에 처음으로 설계했으며 미국 국가 표준으로 지정
-SHA-1SHA 함수들 중 가장 많이 쓰이며, TLS, SSL, PGP, SSH, IPSec 등 많은 보안 프로토콜과 프로그램에서 사용됨
-SHA-1은 이전에 널리 사용되던 MD5를 대신해서 쓰이기도 한다. 혹자는 좀 더 중요한 기술에는 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();

     encryptedStrc.update(password.getBytes());

     out.write(encryptedStr,0,encryptedStr.length);

  }

  catch (FileNotFoundException e) {

    패스워드를 암호화 한 뒤 소켓을 통해 전송