민감한 데이터 노출(Sensitive Data Exposure), OWASP Top 10 A3

민감한 데이터 노출은 OWASP Top 10 2013 버전에서는 6위에 있었지만 2017 버전에서 3위로 그 중요도가 올라갔습니다. 그만큼 웹 상에서 다뤄지는 민감한 데이터가 많아졌다는 의미인 것 같습니다.

전화번호, 주소 등 개인정보와 신용카드 번호나 계좌 번호와 같은 결제 정보가 대표적인 민감한 데이터입니다. 이런 데이터들이 마스킹 없이 평문 그대로 노출되는 경우도 있고, TLS(Transport Layer Security) 적용 없이 일반 HTTP통신을 하게 되면 데이터 노출의 위험이 있습니다.

 

민감 정보의 유형

  • 결제 정보: 은행 계좌 번호, 신용카드 번호, 보안카드 번호 등
  • 건강 정보: 진료 기록
  • 개인 정보: 주민등록번호, 생년월일, 주소, 휴대폰 번호, 이메일 주소 등
  • 계정 인증 정보: ID, 패스워드 등

 

민감한 데이터 노출의 유형 및 대응 방안

취약한 암호화

민감 정보를 암호화해서 보관하면 안전하다고 생각하지만 암호화 및 복호화 방식이 취약하면 위험성은 여전히 존재합니다. 패스워드의 경우는 평문을 열람해야 할 이유가 없기 때문에 주로 SHA-256과 같은 해시 암호를 통해 일방향 암호화(One-way Encryption) 하여 보관하므로 노출의 위험이 적지만, 복호화가 필요한 결제 정보 같은 경우는 주의가 필요합니다.

신용카드 번호나 계좌번호 등은 편리한 암호화 및 복호화를 위해 자동 암호화 도구를 이용해 어플리케이션 API 또는 DB Function을 통한 암복호화를 하는 경우가 많습니다. 이 경우 인젝션 공격에 취약하게 되므로 주의가 필요합니다.

 

대응 방안

비대칭키를 통한 암호화가 필요합니다. 공개키를 통해 암호화하고 신뢰할 수 있는 백엔드 어플리케이션에서만 개인키를 통해 복호화합니다.

전송구간에서의 보안도 유의해야 합니다. 암호화되지 않은 통신방식을 적용하게 되면 스니핑 공격에 취약해지므로 반드시 암호화된 통신(HTTPS)를 이용하도록 합니다.

비대칭키 암호 개념도. 사진: https://raonctf.com/essential/study/web/asymmetric_key

 

일부 페이지에서 평문 통신 사용

개발자의 실수 또는 어떤 특정한 이유로 특정 페이지에서 평문 통신을 사용하게 되면 스니핑 공격에 취약해 집니다.

대응 방안

가능하면 모든 페이지에서 HTTPS를 이용한 통신을 해야합니다. 불가피하게 HTTP 통신을 사용해야 한다면 해당 페이지에서 민감 정보를 분리해야 합니다.

 

솔트 없는 해쉬 암호 사용

해쉬 암호의 안전성을 강화하기 위해 사용되는 메커니즘 중 하나는 솔트(Salt)입니다. 해시 암호는 복호화할 수 없지만 솔트 없이 사용하면 같은 평문에 대해 같은 해시가 도출되므로 공격자는 다양한 평문을 해시한 후 저장된 해시와 비교하여 일치하는 평문을 찾아낼 수 있습니다. 주로 패스워드 저장에 이용되는 해시 암호를 솔트 없이 암호화하게 되면 생일 공격(birthday attack)과 같은 해시 공격에 노출되게 됩니다.

 

대응 방안

해시 암호 시 반드시 솔트를 추가합니다. 이 때 솔트는 각각의 평문에 대해 다른 솔트를 사용해야 합니다. 솔트를 별도로 관리하여 각각 다른 솔트를 통해 해싱하면 더 안전한 패스워드 보관이 가능합니다.

해시 암호에서의 솔팅.

 

Front-end에서의 마스킹 처리

종종 데이터 마스킹 처리를 Front-end에서 처리하는 경우를 보게 됩니다. 일단 데이터가 평문 상태로 Front-end에 도달하게 되면 화면 상에는 마스킹하여 보여주더라도 해당 평문을 알아내는 것은 해커의 입장에서 어려운 일이 아닙니다. 화면에 마스킹하여 보여주는 데이터는 Back-end에서부터 마스킹처리하여 가져와야 합니다.

 

대응 방안

마스킹 데이터는 백엔드에서 생성하여 프론트엔드로 전송합니다. 화면 상 평문을 보여주어야 하는 업무가 있다면 다시 백엔드에 요청하여 해당 시기에만 평문을 받아와야 합니다.

 

 

참고 자료

휴먼스케이프 기술 블로그, [OWASP] Sensitive data exposure

Hdiv, Sensitive Data Exposure

Wordfence, Password Authentication and Password Cracking

 

 

다른 글 더 보기

인젝션(Injection), 가장 오래되고 파워풀한 보안 공격

취약한 인증(Broken Authentication), 사용자 정보보호를 위한 필수 보안 요소

 

728x90
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기