フロントエンド コードのセキュリティと難読化

著者: JD リテール周明亮

1. 友達のウェブページの分析

1.1 アマゾン

Amazonストアアドレス:
https://www.amazon.com/OtterBox-Commuter-Case-iPhone-Packaging

  • ページの初期化時にすべてのインタラクティブ イベントが送信されるわけではなく、特定のクリック イベント js コンテンツが js リクエストの待機後に送信されます。
  • コードのフォーマットを防ぐために自己実行を使用します。[Chrome の組み込みコード整形ツールを呼び出せない]
  • 独自開発のフレームワーク、非伝統的な react/vue/angular を採用。大量のデータが data-xx タグを介して転送されるため、タグ構造がより複雑になります。

 

1.2 タオバオ

主に暗号化のインターフェースと連携し、マルチフィールド干渉を採用し、テンプレートをロードします。大量のテンプレート データを送信し、クライアントを通じて入力します。

 

クライアントコードは従来の通常の暗号化モードです

 

1.3 拼多多

  • 従来の一般的な暗号化方式は、React フレームワークを使用します。[明らかな React 構文シュガー]
  • 主要なビジネスの詳細には必須のログイン操作が必要であり、アカウントは禁止される可能性があります。

 

 

2.攻撃者の視点

  1. 【Webリバース】 従来のWebページ暗号化モードのリスクコントロールJSアルゴリズム解析
  2. アプリのクラック | アンチデバッグ APP での Webview に対する H5 アプリのアンチデバッグ
  3. Puppeteer はデバッグ プロセスに統合されており、デバッグ エクスペリエンスは爽快です。ユーザーの実際のクリックプロセスをシミュレートし、プロセスベースの操作を実行できます.このタイプの方法は区別が難しいです.
  4. Node.js セキュリティのベスト プラクティス Node JS によって公式にリリースされた一般的なタイプの攻撃。
  • 参考:NodeJS公式サイト取扱説明書
  1. 数行の JS でコンピューター上のすべてのデータを読み取ることができますか?  サイドチャネル攻撃、メモリの応答速度からユーザーのパスワード情報を取得
  2. Qwik JS フレームワークは、  JSコードの分割を一般的な「コンパイル時間」 ( webpackチャンクなど)、「ランタイム」 (動的インポートなど)から「対話時間」に変更しますインジェクションロードは、ユーザーが操作した場合にのみ実行されます。
  3. 実践: Tmall カーディーラー詳細ページの SSR 変換は、Tmall カーディーラー詳細ページで実践されています. 変換原理は基本的に Qwik JS に基づいています.
  4. フロントエンド セキュリティの CSRF について話す
  • コード クラッキングに基づく非コード リーク、一般的なタイプの Web 攻撃
  • XSS 攻撃: クロスサイト スクリプティング (クロスサイト スクリプティング)。攻撃の目的は、クライアントに保存されている Cookie や、クライアントの ID を識別するために他の Web サイトで使用されるその他の機密情報を盗むことです。正当なユーザーの情報が取得されると、攻撃者は正当なユーザーになりすまして Web サイトと対話することさえできます。
  • CSRF (クロスサイト リクエスト フォージェリ) クロスサイト リクエスト フォージェリ: 攻撃者は被害者をサード パーティの Web サイトに誘導し、サード パーティの Web サイトで攻撃対象の Web サイトにクロスサイト リクエストを送信します。被害者が攻撃された Web サイトで取得した登録資格情報を使用して、バックグラウンドでのユーザー検証をバイパスし、ユーザーになりすまして攻撃された Web サイトで操作を実行するという目的を達成します。
  • ネットワーク乗っ取り攻撃は、主に一部のプロキシ サーバーや、wifi などのミドルウェアを使用したネットワーク リクエストを介して乗っ取り、犯罪者はこの方法でユーザー情報を取得します。
  • コンソールはコードを挿入し、犯罪者はさまざまなプロンプトを使用して、ユーザーをだましてコンソールで何らかの操作を行わせ、ユーザー情報を取得します。
  • フィッシング攻撃、
  • 電子メール フィッシング: 大量の電子メールを送信して、ユーザーを騙して悪意のあるリンクや添付ファイルをクリックさせ、貴重な情報を入手する
  • フィッシング: Web サイト上で Web サイトを偽装すること。通常は正規の Web サイトを模倣します。ユーザーをだましてこの Web サイトをクリックさせるために、フィッシング メール、テキスト メッセージ、電話などの支援技術が採用されます。
  • 対詐欺
  • SPFレコード、SPFとはスパム防止のために提案されたDNSレコードの一種で、ドメイン名が持つすべてのIPアドレスを送信メールに登録するTXT型のレコードです。
  • Google の Internet-ready API である SafeBrowsing API を使用すると、ブラウザは URL をレンダリングする前にその正確性をチェックできます。
  • DDOS: Distributed Denial of Service (Distributed Denial of Service)、簡単に言えば、大量のリクエストを送信することはサーバーを麻痺させることです
  • SQL インジェクション攻撃とは、Web に接続されたデータベースに悪意のある SQL 文を送信することで発生する攻撃であり、Web サイトにセキュリティ上のリスクや脅威をもたらし、検証の回避や個人情報の漏えいなどの危険を引き起こす可能性があります。
  • クリック ハイジャック、クリック ハイジャックとは、透明な iframe が Web ページに隠されていることを意味し、外側の偽のページは、ユーザーにクリックを誘導するために使用されます. 実際には、非表示のフレームでクリック イベントがトリガーされ、ユーザーが行ういくつかの操作が実行されます。知らない。
  1. AI が介入してコードを解釈し、コードの逆コンパイル プロセスを高速化します。
  • たとえば、解釈のためにフレンドコードをchatgptに入れます

 

 

これはコードの一部にすぎません. 完全なコードを 1 つずつ分析すると、人にコードを 1 つずつ読ませなくても、完全なコンテキストを取得できます。

次のような AI コードのデバッグもあります。
https://github.com/shobrook/adrenaline

 

3.ディフェンダーズアングル

  1. JS コードの難読化
  • 回答: プログラミングを理解していない一般の開発者または一般のユーザー。例: ほとんどの Web ページ
  • 意味理解を減らすためのコードの難読化/暗号化。
  • コードのデバッグ、特定の DOM ノードの検索、ブレークポイントのデバッグを繰り返すことで、関連する実行ロジックを理解できます。
  1. JS 仮想マシン
  • 回答: プロのプログラミング開発者。例: なし
  • AST を介してコードをバイナリ コードに変換し、仮想マシンを介してバイナリ コードを実行します。
  • Web ページの実行パフォーマンスが低下し、より多くの JS ファイルが読み込まれます。
  • ブレークポイント プロンプトは実行できませんが、復号化プロセスは外部に公開されます。
  • 仮想マシン全体の暗号化ルールを理解するために、JS 仮想マシンを直接呼び出し、最小限の JS フラグメントを実行します。
  1. アプリを強制的にダウンロードし、Webview で開きます
  • 回答: 中級および上級のプログラミング開発者。例:拼多多など
  • H5コードはデータを外部に表示するだけで、主要なコンテンツはユーザーにAPPのダウンロードを促し、デバッグの難しさを増します
  • ユーザーは APP をダウンロードしたがらず、ユーザーの喪失につながります。
  1. インターフェイスの検証/フィールドの混乱
  • 応答: Python 爬虫類 (Taobao、Haocihaoyu.com など)。
  • インターフェイスを介して難読化されたテンプレートを生成し、複数のフィールドをランダムに送信し、関連する JS テンプレート フレームワークを構成します。
  • インターフェイスの内容はbase64/aesの暗号化と復号化処理で送信されますが、復号化されたJSはクライアント側に残され、まだクラックされる可能性があります。
  • トークンの必須検証、3 つのエラーの送信、直接データが返されない、ユーザーが強制的にログインする必要があるため、簡単にユーザーを失う可能性があります。
  1. カスタムフレーム
  • 回答: Python 爬虫類、中級および上級プログラミング開発者。例: アマゾン/タオバオ。【掘り続ける必要がある】
  • クローラーは、最初は関連するボタンの API 要求インターフェースを取得できず、JS が戻るのを待つ必要があります。
  • クライアント側に無関係なデータがたくさんあり、DOM ノードが全体的に不規則に見える
  • JS はインターフェイス リクエストを介して返され、関連するトークン パラメータを使用して、ランダムに配信できます。

4. 結論

4.1 ほとんどの攻撃者の共通点

1) ログインしたくない、または通常のユーザー情報を盗んで攻撃に使用する

  • 例えば、一部のプラグインプログラムは外部ユーザーに無料で提供されており、ユーザーは、外部プログラムを通じて利益の獲得を加速できると考えて、小さな利益に貪欲です。
  • 実際、ユーザー名は記録され、攻撃者に渡されます。

2)会社の行為である場合、IPが記録される可能性が高く、法的リスクがあります。

  • コンピュータ名、IPアドレスを解析可能
  • IP サーバー プロキシの実行、仮想 IP、仮想ロケーションの使用
  • Alibaba Cloud/JD Cloud などのクラウド サーバーを使用して、対応する Web サイト、JD Cloud to JD Web サイトを攻撃します。

3) トークンの変更を複数回試行し、リクエストを送信するふりをする

  • 偽UA
  • デバッグモードを有効にする

4) DOM 構造の特徴を分析し、コンソールを使用してグローバル ストレージ変数を出力する

5) クッキー、グローバル検索を通じて特定のキーワードを分析する

6) ネットワーク リクエストを行うときは、関数の実行スタックを確認し、コア リクエスト関数を段階的に見つけます。

4.2 一般的な開発者プラグインの扱い

  • 主に puppeteer を使用すると、ユーザーの操作プロセスを完全にシミュレートできます。ノードが表示されるのを待ってから操作できます。従来のコードのデバッグ操作は不要です。DOM ノードのクリック応答を直接操作する
  • このような要件に基づいて、DOM ノードの位置を頻繁に変更する必要があります。ビジネス側のコストが高くなり、毎回バージョンをリリースする必要があります。ノードの特徴がランダムに生成される場合、独自のフレームワークを開発する必要があり、コストが高い

4.3 Python 爬虫類の扱い

1) フロントエンドコードは従来の暗号方式を採用

  • https://github.com/mishoo/UglifyJS
  • https://github.com/terser/terser
  • https://github.com/javascript-obfuscator/javascript-obfuscator
  • 暗号化、強化、およびトークンをインターフェースする傾向が強い

2) APPへの入り口のある事業

  • デバッグ自体には、マシンへの追加のリンクが必要であり、デバッグの複雑さが増します。
  • APPの自己監視と連携し、特定のAPIをより安全にすることができます
  • JS仮想マシン方式はこんな業種にしか使えない

3) キーワードを混同して機能検索を減らす

  • 次の方法を使用できますが、これらは単なる例であり、さらに多くの方法が存在する可能性があります。配列合成、オブジェクト合成など。
  • const GLOBAL_SOCKET_NAME = 'c6on6ne6ct'.concat('S6o').concat('c6ke6t').replace(/6/g, '')
  • 従来のコードの難読化では、文字列全体が処理されないため、キーワードが直接公開されます。

 

クライアント側の暗号化の混乱は、心を込めて解決できる限り、解読されます。何もしないのではなく、解読時間を遅らせることができます。解読が速くなるだけです。

実際、当社の外部ページの多くには、非標準のログ出力や、暗号化されたアンチスワイプ トークンの直接的な外部公開など、多くの公開リスクがあります。例えば:

 

誰でも自分でチェックできます〜

{{o.name}}
{{m.name}}

おすすめ

転載: my.oschina.net/u/4090830/blog/8652546