시큐어 코딩 6

불안정한 약한 암호 알고리즘 사용

요약. 안전성이 강한 애플리케이션은 불안전하거나 약한 암호를 기피한다. 현재 컴퓨터의 계산 능력은 무차별대입을 통해 암호화를 우회한다. 예를들어 DES 알고리즘은 높은 불안전성으로 간주한다. DES 알고리즘으로 메시지를 암호화에 사용하면 EFF와 같은 머신에 의해 수일 안에 복호화 되버린다. 현재에는 DES 사용 시 보안적으로 안전하지 않으므로 다른 공개된 알고리즘(AES 암호 등)을 교체해야합니다. 바로 소스코드 보면서 진행해보겠습니다. 키 생성을 위한 소스코드입니다. 키 생성 시, 안전성을 위해 secuRandom이라는 안전한 난수를 추출하며, 258bit의 키를 뽑아내고자 합니다. 키 길이가 길수록 보안강도는 올라가게 되어있습니다. 그만큼 많은 경우의 수를 탐색 해야하기 때문입니다. 다음은 AES의..

시큐어 코딩 2020.03.27

public 메소드를 통한 private array 접근

프로그래밍 개발 시 접근 지정자를 통해 해당 데이터의 접근 권한을 지정할 수 있습니다. private , protected, public 그중 본 클래스에서만 접근할 수 있는 private 접근 지정을 통해 외부 클래스의 접근을 방지하여 데이터의 안전성을 가져가는 것입니다. 그러나 여기서 한 가지 조심해야할 점이 있습니다. 다른 자료형들은 괜찮으나, overwrite가 가능한 array는 public 메소드를 구현할 시 신중하게 구현해야합니다. 무엇을? 위의 사진은 private char array 형태로 setter,getter를 구현한 것입니다. 그러나 여기서 두 가지 취약점이 존재하게 됩니다. 바로 public getter,setter 메소드를 통해 private array의 주소를 통해 값을 조작..

시큐어 코딩 2020.03.24

중요정보 키보드 캐시

OWASP MASVS에서도 주의를 요하는 취약점인 '중요정보 키보드 캐시 저장'에 관한 이슈입니다. 깔끔하게 정리하자면 '키보드 복사/붙여넣기로 중요정보가 유출될 수 있다' 라는 것입니다. ? 클립보드를 이용해 정보를 복사하여 붙여넣기를 하는 과정은 다음과 같습니다. 1. 정보를 복사하면 해당 정보는 키보드 캐시 공간에 저장이 됩니다. 2. 저장된 정보를 붙여넣을 시 키보드 캐시에서 저장한 정보를 불러와 붙여넣기가 가능해지는 것입니다. 즉 클립보드와 같은 역할의 악성 코드가 스마트폰에 설치되어 있다면 중요정보가 줄줄 새나갈 수 있습니다. 사용되는 서비스가 스마트폰에 부착된 모든 클립보드를 제거할 순 없지만 적어도 본인 서비스에서의 정보만큼은 키보드 복사가 불가능하게 만들어줘야 안전하다고 말할 수 있을 것..

시큐어 코딩 2020.03.22

내부저장소를 활용한 민감정보 저장

서비스의 운용을 위해 필요한 정보를 받는 것은 자연스러운 일입니다. 그중 대표적으로 비밀번호를 말할 수 있으며 그외 주체를 식별할 수 있는 정보들에 대해서 우리는 안전하게 처리해줘야할 필요가 있습니다. 민감정보들은 서버로 전송하여 데이터베이스에 암호화한 뒤 저장하는 것이 자연스럽다고 생각할 수 있습니다. 그러나 편의를 위해 혹은 다른 이유들로 인해 내부 저장소를 사용할 일이 있습니다. 이에 따라 Android에서는 정보의 간단한 저장 및 읽기를 SharedPreferences를 통해 제공합니다. SharedPreferences? Android에서 제공하는 XML방식의 기술방법입니다. XML 파일에 Write/Read를 통해 저장된 정보를 빠르게 읽고 쓸 수 있습니다. 스마트폰은 사용자가 접근할 수 있는 ..

시큐어 코딩 2020.03.13

JAVA 메모리 취약성 제거

JAVA 개발을 하다보면 String 객체를 이용하여 개인정보 관련 데이터를 넣어서 로직을 처리하는 경우가 있습니다. 그러나 이 경우 String 객체에 개인정보가 남아 있어 '메모리 덤프'를 이용해 개인정보가 유출 된다면? String? 자바의 String은 값을 주입하는 순간, 값에 대한 객체를 생성하여 참조하게 됩니다. 위의 사진 처럼 하나의 값에 대해 참조를 하게됩니다. 이때 바로 암호화를 이용하여 보호하면 된다고 생각한다. 암호화 수행 후 메모리 결과는 다음과 같습니다. 이렇게 Mypassword 데이터는 메모리에 남아 있으며, String 객체는 새로운 객체를 생성하여 암호화된 데이터를 참조하는 형태가 됩니다. 즉 메모리 덤프를 통해 개인정보 탈취가 가능하다는 것입니다. 우리는 본질적으로 메모..

시큐어 코딩 2020.03.11

Android 개발 시 보안을 위한 KeyStore

안드로이드 개발 시 보안의 이슈중 하나가 바로 '비밀 키'에 대한 보관 방법일 것입니다. 사실 서버, 격리된 별도의 공간에서 개인 키든, 대칭 키든 보관하는게 안전하겠으나 어떠한 사정에 의해 단말기에 저장하게 된다면 고민이 많아질 것입니다. 키 스토어 (KeyStore) 키 스토어는 컨테이너라는 공간속에 RSA키페어 및 AES대칭키를 저장하는 시스템을 의미합니다. 컨테이너는 외부에서 접근할 수 없는 형태이며 어플리케이션을 삭제하면 컨테이너의 데이터도 같이 삭제되므로 데이터 유출이 없게 됩니다. 이러한 컨테이너에 RSA키페어 및 AES대칭키를 저장하여, 저장된 키로 '비밀 키'를 암호화 하여 안전하게 보관할 수 있습니다. 또한, 해당 어플리케이션 내부 소스코드를 통해서만 접근이 가능하니 더욱 보안 강도가 ..

시큐어 코딩 2020.02.10