緊急時対応の基本的な考え方と基本動作

セキュリティ業務の中でユーザーのニーズに最も近いものとして、緊急時対応の理解はセキュリティ業務従事者が持つべき基本的な資質です。

本稿では、緊急対応の定義、よく使われる理論モデル、LinuxおよびWindowsオペレーティングシステムにおける一般的な緊急対応の考え方から、緊急対応において身につけるべき基礎理論と基本的な運用方法をまとめます。

1. 緊急時対応の基本理論

1.1 ネットワークセキュリティ緊急対応の概念

ネットワーク セキュリティとは、ネットワーク システムのハードウェアとソフトウェア、およびシステム内のデータが、システムの継続的で信頼性の高い正常な動作を保証するために、偶発的または悪意のある理由による損傷、変更、または漏洩から保護されることを意味します。中断のないネットワーク サービス。

ネットワーク セキュリティ緊急対応とは、発生した、または発生する可能性のあるセキュリティ インシデントから資産のセキュリティを保護するための監視、分析、調整、および処理の活動を指します。主な目的は、ネットワークセキュリティへの備えを整え、予期せぬネットワークセキュリティインシデントが発生した場合に秩序正しく対応し、適切に対処できるようにすることです。

緊急対応の主な活動には、次の側面が含まれる必要があります。

  • 雨の日の準備: 雨の日が起こる前に準備します。たとえば、リスク評価の実施、セキュリティ計画の策定、セキュリティ意識向上トレーニングの実施、セキュリティ通知の発行による早期警告の発行、およびその他のさまざまな予防策です。
  • 救済策: イベントの発生後に取られる対応措置。その目的は、イベントによって引き起こされる損失を最小限に抑えることです。これらのアクションの責任者は人またはシステムにあります。たとえば、イベントが発見された後、緊急措置を講じます。対策 システムのバックアップ、ウイルス検出、バックドア検出、ウイルスまたはバックドアの削除、隔離、システム回復、調査と追跡、侵入証拠収集、ソース追跡などの一連の操作を実行します。

1.2 緊急対応の古典的なモデル - 適応型セキュリティ アーキテクチャ

以下は、本書で紹介されている比較的理解しやすい適応型セキュリティ アーキテクチャ モデルのリストです。それに対応して、ネットワーク スライディング スケール モデル、ネットワーク キリングおよびアンチキリング チェーン モデル、ダイヤモンド モデルなどが含まれています。原文に移動してご覧ください。原文は「緊急対応 – ネットワークセキュリティの予防、発見、治療および回復」からのものです。

アダプティブ セキュリティ アーキテクチャは2014 年にGartnerによって提案され、将来の次世代セキュリティ アーキテクチャを指向しています。自己適応型セキュリティ アーキテクチャ モデルは、防御、検出、対応、予測の 4 つの側面から、セキュリティ保護が継続的で周期的なプロセスであり、きめ細かく、多角的で継続的なものであることを強調しており、リアルタイムの動的分析を実行します。絶えず変化するネットワークと脅威環境に自動的に適応し、独自の防御メカニズムを常に最適化します。

このモデルは、現在の機関や企業の防御機能では高度な標的型攻撃に対処することが難しいという問題を解決するために提案されています。第一に、企業システムが継続的な攻撃にさらされている場合、組織には継続的な防御能力が欠けています。第二に、従来のセキュリティ フレームワークは新たな脅威や攻撃に直面するとすでに無力です。第三に、緊急対応の方法はもはや持続的な高度な攻撃を志向していません。 (持続的な脅威に対抗するために、厳戒態勢の緊急事態を継続することはできません)。したがって、ガートナーは、高度な標的型攻撃に対処するために、次の図に示すような適応型セキュリティ アーキテクチャ モデルを提案しています。

ここに画像の説明を挿入

防御、検出、対応、予測を統合する適応型セキュリティ アーキテクチャは、相互作用なしに独立して戦うのではなく、インテリジェントに統合され、調整された方法でさまざまな攻撃に対応します。特に高度な脅威に対しては、適応型システムは保護機能を継続的に改善する必要があります。適応型セキュリティ アーキテクチャの 4 つの機能の簡単な説明は次のとおりです。

  1. 防御機能: テクノロジー、製品、サービスを通じて攻撃を防御します。目標は、攻撃対象領域を減らすことで攻撃のしきい値を高め、ビジネス システムが影響を受ける前に攻撃をブロックすることです。
  2. 検出機能: 組織や企業自体がすでに攻撃を受けていると想定し、防御ネットワークをすり抜けた攻撃を検出するために使用されます。目標は、ダウンタイムやその他の潜在的な損失の脅威を軽減することです。
  3. 対応機能:侵入認証や攻撃元の追跡を目的として、検知・分析機能(または外部サービス)により検知されたトランザクションを効率的に調査・修復するために使用されます。将来の事故を避けるために新しい防御策を考え出す
  4. 予測能力: 防御、検出、対応の結果を通じてベースライン システムを継続的に最適化し、未知の新しいタイプの攻撃を徐々に正確に予測し、既存のシステムを脅かす新しいタイプの攻撃を積極的にロックし、脆弱性の優先順位を付けて特定します。防御機能と検出機能に戻り、プロセス全体のループを閉じます。

適応型セキュリティ アーキテクチャ モデルの深い理解と合理的な適用は、組織や企業が新しいネットワーク セキュリティ防御システムを構築し、ネットワーク セキュリティのアクティブな防御能力を向上させ、最終的には安全な管理性、制御性、可視性、派遣可能性、および持続可能性を達成するのに役立ちます。

1.3 緊急時対応への一般的なアプローチ - PDCERF

PDCERF 手法は 1987 年に初めて提案されました。この手法は、緊急対応プロセスを準備段階、発見段階、鎮圧段階、撲滅段階、復旧段階、要約段階の 6 つの段階に分割します。そして、緊急時対応の全体戦略に従って、各段階の適切な目的を定義し、緊急時対応の順序とプロセスを明確にします。

次の図は、6 つのプロセスの PDCERF モデルです。

画像の説明を追加してください

1.3.1 準備段階

この段階では予防に重点が置かれ、機関や企業のセキュリティリスクの特定、セキュリティポリシーの確立、連携システムや緊急対応システムの確立などが主な作業となる。セキュリティ ポリシーに従ってセキュリティ デバイスとソフトウェアを構成し、緊急時の対応と復旧に備えてホストを準備します。

ネットワーク セキュリティ対策を通じて、スキャン、リスク分析、パッチ適用などのいくつかの準備作業が実行されます。条件が整い、許可が得られれば、監視施設の設置、データの集計・分析システムの確立、緊急時対応目標を達成するための戦略・手順の策定、情報伝達経路の確立、収集体制の構築が可能となる。緊急時の対応体制を確立することができます。

1.3.2 検出フェーズ

検出フェーズでは主に、イベントが発生したか、進行中であるか、またイベントの原因と性質が検出されます。インシデントの性質と影響の重大度、修復のためにどのような専用リソースが投入されると予想されるかを決定します。検出ツールを選択し、異常を分析し、システムまたはネットワークの動作の監視レベルを高め、セキュリティ インシデントの範囲を推定します。集約により、ネットワーク全体の大規模イベントが発生したかどうかを判断し、緊急レベルを決定し、どのレベルの緊急計画を開始するかを決定します。

一般的な事故の症状は次のとおりです。

  1. アカウント乗っ取り
  2. 嫌がらせスパム
  3. ビジネスサービス機能の障害
  4. 業務システムの内容が明らかに改ざんされている
  5. システムクラッシュ、リソース不足

1.3.3 阻害段階

抑制フェーズの主なタスクは、攻撃/妨害行為の範囲を制限し、潜在的な損失を減らすことです。すべての抑制活動はインシデントの正確な検出に基づいており、抑制の相互作用では、検出段階で見つかったセキュリティ インシデントの現象、性質、範囲、その他の属性を組み合わせて、正しい抑制戦略を策定して実装する必要があります。

抑制戦略には通常、次のものが含まれます。

  1. すべてのシステムを完全にシャットダウンします
  2. ホストまたはネットワークの一部をネットワークから切断する
  3. すべてのファイアウォールとルーターのフィルタリング ルールを変更する
  4. 攻撃されたログインアカウントをブロックまたは削除します
  5. システムまたはネットワークの動作の監視を強化する
  6. イベント情報をさらに取得するためにおとりサーバーをセットアップする
  7. 攻撃を受けているシステムまたはその他の関連システムのサービスの一部をシャットダウンします。

1.3.4 根絶段階

根絶段階の主なタスクは、攻撃を回避し、同じ手段を使用して再度システムを攻撃してセキュリティ インシデントを引き起こすことを回避するために、イベント分析を通じて根本原因を特定し、それを完全に根絶することです。広報を強化し、危険性と解決策を公開し、端末の問題を解決するようユーザーに呼びかけます。業界や主要部門の問題を発見し、一掃するための検出作業を強化します。

1.3.5 回復フェーズ

回復フェーズの主なタスクは、損傷した情報を通常の動作状態に完全に復元することです。システムを通常の状態に戻し、信頼できるバックアップ メディアからユーザー データを復元する必要性とスケジュールを決定します。システムおよびアプリケーション サービスをオンにし、システム ネットワーク接続を復元し、回復システムを検証し、他のスキャンを監視し、侵入者の再侵入を示す信号を検出します。一般に、破損したシステムを正常に復元したい場合は、クリーンなバックアップ システムを用意し、システム回復のための操作マニュアルを準備して維持し、システムの再インストール後にシステムの包括的なセキュリティ強化を実行する必要があります。

1.3.6 概要ステージ

概要フェーズの主なタスクは、緊急対応プロセスの関連情報をレビューおよび統合し、事後分析を実施し、セキュリティ計画、ポリシー、手順を要約および修正し、侵入の再発を防止するためのトレーニングを実施することです。侵入の重大度と影響に基づいて、新たなリスク分析を実施し、システムおよびネットワーク資産の新しいインベントリを作成するかどうかを決定します。この段階での作業は、準備段階の開発において重要な補助的な役割を果たします。

概要段階の作業には主に次の 3 つの側面が含まれます。

  1. インシデント処理に関する最終報告書を作成する
  2. 緊急対応プロセスに問題がないか確認し、インシデント影響プロセスを再評価および修正する
  3. 事件後のより的を絞った訓練を促進するために、事件処理における緊急対応要員の相互コミュニケーションにおける欠点を評価する

2. 緊急対応の侵入調査

準備段階で必要となることのほとんどは、セキュリティ ベースラインに関連する複雑な基本操作であるため、この記事では記載しません。私たちの緊急対応はイベントから直接始まります。今、緊急対応の必要性を受け取ったと仮定します。特定のサーバーまたは複数のサーバーを見つけた場合はどうすればよいですか。悪意のあるプログラムや Web シェルを迅速に特定し、攻撃者の攻撃パスを復元する方法が重要な問題となっています。

緊急対応イベントの一般的なカテゴリ:

Web 侵入: Web ページ上のトロイの木馬、ホームページ改ざん、Web シェル

システム侵入: トロイの木馬、ランサムウェア、リモート コントロール バックドア

ネットワーク攻撃: DDOS 攻撃、DNS ハイジャック、ARP スプーフィング

2.1 Linux 侵入のトラブルシューティング

2.1.1 アカウントのセキュリティチェック

ハッカーは侵入後に自分の権利を維持する方法を必ず見つけますが、当然のことながら、最低限の権利保護ソリューションはバックドア アカウントを作成することです。来て、来て、低レベルのハッカーの尻尾を捕まえるためのいくつかのコマンド。

#1、用户信息文件 /etc/passwd
root:x:0:0:root:/root:/bin/bash
account:password:UID:GID:GECOS:directory:shell
#用户名:密码:用户ID:组ID:用户说明:家目录:登陆之后的 shell
#注意:无密码只允许本机登陆,远程不允许登陆

#2、影子文件 /etc/shadow
root:$6$oGs1PqhL2p3ZetrE$X7o7bzoouHQVSEmSgsYN5UD4.kMHx6qgbTqwNVC5oOAouXvcjQSt.Ft7ql1WpkopY0UV9ajBwUt1DpYxTCVvI/:16809:0:99999:7:::

#用户名:加密密码:密码最后一次修改日期:两次密码的修改时间间隔:密码有效期:密码
#修改到期到的警告天数:密码过期之后的宽限天数:账号失效时间:保留

よく使用されるいくつかのコマンド:

#1.who --- 查看当前登录用户(tty 本地登陆  pts 远程登录)
[root@blackstone ~]# who
batman   tty1         2023-01-10 03:36
batman   pts/1        2023-03-22 19:24 (192.168.2.1)
   
#2.w --- 查看系统信息,想知道某一时刻用户的行为
[root@blackstone ~]# w
 20:51:23 up 6 days,  7:22,  2 users,  load average: 0.01, 0.02, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
batman   tty1                      10Jan23 70days  1.48s  0.01s login -- batman
batman   pts/1    192.168.2.1      19:24    3.00s  0.02s  0.04s sshd: batman [priv]


#3.uptime --- 查看登陆多久、多少用户,负载状态
[root@blackstone ~]# uptime
 20:53:23 up 6 days,  7:24,  2 users,  load average: 0.00, 0.01, 0.05

トラブルシューティングのアイデア:

#1.查看当前PID为0的特权用户
[root@blackstone ~]# awk -F: '$3==0{print $1}' /etc/passwd
root

#2.查询可以远程登录的帐号信息
[root@blackstone ~]# awk '/\$1|\$6/{print $1}' /etc/shadow

#3.除root帐号外,其他帐号是否存在sudo权限。如非管理需要,普通帐号应删除sudo权限
[root@blackstone ~]# more /etc/sudoers | grep -v "^#\|^$" | grep "ALL=(ALL)"

#4.禁用或删除多余及可疑的帐号
usermod -L user    禁用帐号,帐号无法登录,/etc/shadow 第二栏为 ! 开头
userdel user       删除 user 用户
userdel -r user    将删除 user 用户,并且将 /home 目录下的 user 目录一并删除

2.1.2 履歴コマンド

基本的な使用法: .bash_history ファイルを通じてアカウントによって実行されたシステム コマンドを表示します。

#1、root 用户的历史命令
histroy
#2、打开 /home 各帐号目录下的 .bash_history,查看普通帐号执行的历史命令。为历史的命令增加登录的 IP 地址、执行命令时间等信息:
#2.1 保存1万条命令
sed -i 's/^HISTSIZE=1000/HISTSIZE=10000/g' /etc/profile

#2.2 在/etc/profile的文件尾部添加如下行数配置信息:

######jiagu history xianshi#########
USER_IP=`who -u am i 2>/dev/null | awk '{print $NF}' | sed -e 's/[()]//g'`
if [ "$USER_IP" = "" ]
then
USER_IP=`hostname`
fi
export HISTTIMEFORMAT="%F %T $USER_IP `whoami` "
shopt -s histappend
export PROMPT_COMMAND="history -a"
######### jiagu history xianshi ##########

#2.3 让配置生效
source /etc/profile 

#生成效果: 
1  2018-07-10 19:45:39 192.168.204.1 root source /etc/profile


#3、历史操作命令的清除。但此命令并不会清除保存在文件中的记录,因此需要手动删除 .bash_profile 文件中的记录。
history -c

侵入調査:

#进入用户目录下,导出历史命令。
cat .bash_history >> history.txt

履歴コマンドを遡及的に復元することで、悪意のあるユーザーがサーバー内で何をしたかを推測できます。ただし、多くの侵入者はここですべての履歴コマンドを削除し、それらを使用して履歴コマンドをクリアしますが、一部の愚か者も排除できませんhistory -c。さもなければ、痕跡を消す前に私たちによって列から追い出されてしまいます。このようにして、履歴コマンドを取得して分析することができます。

2.1.3 異常ポートの確認と異常プロセスの発見

#1.查看已经达到连接状态的连接信息,查找恶意进程的蛛丝马迹(连接端口为连续的数字是很可疑)
[root@blackstone ~]# netstat -antp | grep EST
tcp        0      0 127.0.0.1:45268         127.0.0.1:9000          ESTABLISHED 84199/php-fpm: pool
tcp        0      0 127.0.0.1:45046         127.0.0.1:9000          ESTABLISHED 84172/php-fpm: pool
tcp        0      0 127.0.0.1:9000          127.0.0.1:45000         ESTABLISHED 84169/php-fpm: pool

#2.查看下 pid 所对应的进程文件路径($PID 为对应的 pid 号)
ls -l /proc/$PID/exe
file /proc/$PID/exe


#3.检查异常进程
ps aux | grep pid 

#4.杀掉进程 慎用
kill -9 pid 

2.1.4 起動項目を確認する

システム実行レベルの表現:

実行レベル 意味
0 シャットダウン
1 シングルユーザー モードは Windows のセーフ モードと考えられ、主にシステム修復に使用されます。
2 NFS サービスなしの不完全なコマンド ライン モード
3 完全なコマンド ライン モードは標準の文字インターフェイスです。
4 システム予約済み
5 グラフィックスモード
6 再起動

一般的なコマンド:

#1.查看运行级别命令 
runlevel

#2.查看系统默认允许级别 
[root@blackstone ~]# cat /etc/inittab

#3.开机启动配置文件
/etc/rc.local
/etc/rc.d/rc[0~6].d

#4.例子:当我们需要开机启动自己的脚本时,只需要将可执行脚本丢在 /etc/init.d 目录下,然后在 /etc/rc.d/rc*.d 文件中建立软链接即可。(注:此中的 * 代表 0,1,2,3,4,5,6 这七个等级)

侵入調査:

more /etc/rc.local
tree /etc/rc.d/

通常の状態で存在する可能性のあるファイル:

[root@blackstone ~]# tree /etc/rc.d/
/etc/rc.d/
├── init.d
│   ├── functions
│   ├── keepalived
│   ├── netconsole
│   ├── network
│   └── README
├── rc0.d
│   ├── K50netconsole -> ../init.d/netconsole
│   └── K90network -> ../init.d/network
├── rc1.d
│   ├── K50netconsole -> ../init.d/netconsole
│   └── K90network -> ../init.d/network
├── rc2.d
│   ├── K50netconsole -> ../init.d/netconsole
│   └── S10network -> ../init.d/network
├── rc3.d
│   ├── K50netconsole -> ../init.d/netconsole
│   └── S10network -> ../init.d/network
├── rc4.d
│   ├── K50netconsole -> ../init.d/netconsole
│   └── S10network -> ../init.d/network
├── rc5.d
│   ├── K50netconsole -> ../init.d/netconsole
│   └── S10network -> ../init.d/network
├── rc6.d
│   ├── K50netconsole -> ../init.d/netconsole
│   └── K90network -> ../init.d/network
└── rc.local

2.1.5 計画されたタスクの確認

基本的な使い方:

1. crontab を使用してスケジュールされたタスクを作成します (このサービスが当社によって実行されている場合)

crontab -l   列出某个用户cron服务的详细内容

Tips:默认编写的crontab文件会保存在 (/var/spool/cron/用户名 例如: /var/spool/cron/root

crontab -r   删除每个用户cront任务(谨慎:删除所有的计划任务)

crontab -e   使用编辑器编辑当前的crontab文件 

如:*/1 * * * * echo "hello world" >> /tmp/test.txt 每分钟写入文件

2. anacron コマンドを使用して、非同期タイミング タスク スケジューリングを実装します。

#每天运行 /home/backup.sh 脚本:
vi /etc/anacrontab 
@daily    10    example.daily   /bin/bash /home/backup.sh
#当机器在 backup.sh 期望被运行时是关机的,anacron会在机器开机十分钟之后运行它,而不用再等待 7天。

侵入のトラブルシューティング

/var/spool/cron/* 
/etc/crontab
/etc/cron.d/*
/etc/cron.daily/* 
/etc/cron.hourly/* 
/etc/cron.monthly/*
/etc/cron.weekly/
/etc/anacrontab
/var/spool/anacron/*

#小技巧 使用more查看目录下的所有文件
more /etc/cron.daily/*

2.1.6 検査サービス

サービスが自動的に開始されます

最初の変更方法:

chkconfig [--level 运行级别] [独立服务名] [on|off]
chkconfig –level  2345 httpd on  开启自启动
chkconfig httpd on (默认level是2345)

2 番目の変更方法:

修改 /etc/re.d/rc.local 文件  
加入 /etc/init.d/httpd start

3 番目の変更方法:

ntsysv コマンドを使用して、自己起動型の独立したサービスおよび xinetd サービスを管理します。

侵入のトラブルシューティング

#1.查询已经安装的服务
#1.1RPM 包安装的服务
#1.1.1 基于chkconfig的检测方法
chkconfig  --list  查看服务自启动状态,可以看到所有的RPM包安装的服务
ps aux | grep crond 查看当前服务

##系统在3与5级别下的启动项 
###中文环境
chkconfig --list | grep "3:启用\|5:启用"
###英文环境
chkconfig --list | grep "3:on\|5:on"

#1.1.2 基于systemctl 的检测方法
[root@blackstone ~]# systemctl list-unit-files | grep enable


#1.2 源码编译安装的服务
查看服务安装位置 ,一般是在/user/local/
service httpd start
搜索/etc/rc.d/init.d/  查看是否存在

2.1.7 システムログを確認する

ログのデフォルトの保存場所: /var/log/

ログ構成を確認します: more /etc/rsyslog.conf

ログファイル 説明する
/var/log/cron システムタイミングタスクに関連するログが記録されます
/var/log/cups 印刷情報を記録するログ
/var/log/dmesg システムの電源がオンになったときにカーネルのセルフテスト情報が記録されます。また、dmesg コマンドを使用してカーネルのセルフテスト情報を直接表示することもできます。
/var/log/maillog 電子メール情報を記録する
/var/ログ/メッセージ 重要なシステム情報を記録するログ。このログ ファイルには、Linux システムの重要な情報のほとんどが記録されます。システムに問題がある場合は、最初にこのログ ファイルを確認する必要があります。
/var/log/btmp エラー ログイン ログを記録します。このファイルはバイナリ ファイルなので、vi で直接表示できませんが、表示するには lastb コマンドを使用する必要があります。
/var/log/loadlog システム内のすべてのユーザーの最終ログイン時刻のログを記録します。このファイルはバイナリ ファイルなので、直接 vi にすることはできません。代わりに、lastlog コマンドを使用して表示します。
/var/log/wtmp すべてのユーザーのログインおよびログアウト情報を永続的に記録し、システムの起動、再起動、およびシャットダウンのイベントを同時に記録します。また、このファイルもバイナリ ファイルなので、直接 vi を実行することはできませんが、表示するには最後のコマンドを使用する必要があります。
/var/log/utmp 現在ログインしているユーザーの情報を記録します。このファイルはユーザーのログインとログアウトに応じて継続的に変更され、現在ログインしているユーザーの情報のみが記録されます。同様に、このファイルを直接 vi にすることはできませんが、w、who、users、およびその他のコマンドを使用してクエリを実行します
/var/log/secure アカウントとパスワードに関連するプログラムが記録される限り、SSH ログイン、su ユーザーの切り替え、sudo 認可、さらにユーザーの追加やユーザー パスワードの変更など、検証および認可情報を記録します。このログ ファイルには記録されます。

ログ分析スキル (この部分は後で方向性学習に専念します):

#1.定位有多少IP在爆破主机的root帐号:    
grep "Failed password for root" /var/log/secure | awk '{print $11}' | uniq -c | sort -nr | more

#1.1 定位有哪些IP在爆破:
grep "Failed password" /var/log/secure|grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"|uniq -c

#1.2 爆破用户名字典是什么?
grep "Failed password" /var/log/secure| awk '{print $9}' | sort -nr | uniq -c
 
#2. 登录成功的IP有哪些: 	
grep "Accepted " /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more

#2.1 登录成功的日期、用户名、IP:
grep "Accepted " /var/log/secure | awk '{print $1,$2,$3,$9,$11}' 

#3. 增加一个用户kali日志:
Jul 10 00:12:15 localhost useradd[2382]: new group: name=kali, GID=1001
Jul 10 00:12:15 localhost useradd[2382]: new user: name=kali, UID=1001, GID=1001, home=/home/kali
, shell=/bin/bash
Jul 10 00:12:58 localhost passwd: pam_unix(passwd:chauthtok): password changed for kali
#grep "useradd" /var/log/secure 

#4. 删除用户kali日志:
Jul 10 00:14:17 localhost userdel[2393]: delete user 'kali'
Jul 10 00:14:17 localhost userdel[2393]: removed group 'kali' owned by 'kali'
Jul 10 00:14:17 localhost userdel[2393]: removed shadow group 'kali' owned by 'kali'
# grep "userdel" /var/log/secure

#5. su切换用户:
Jul 10 00:38:13 localhost su: pam_unix(su-l:session): session opened for user good by root(uid=0)

#5.1 sudo授权执行:
sudo -l
Jul 10 00:43:09 localhost sudo:    good : TTY=pts/4 ; PWD=/home/good ; USER=root ; COMMAND=/sbin/shutdown -r now

2.1.8 異常ファイルの検査

1. /tmp ディレクトリ内のファイルなどの機密ディレクトリを表示し、隠しフォルダーに注意してください。「...」という名前のフォルダーには隠し属性があります。

2. WEBSHELL とリモート コントロール トロイの木馬の作成時間を取得します。同じ時間範囲に作成されたファイルを見つけるにはどうすればよいですか?

find コマンドを使用して検索することができます (find /opt -name "*" -atime 1 -type f など)。/opt が翌日までにアクセスしたファイルを見つけることができます。

実際、異常なファイルに対するより効果的な解決策は、さまざまなセキュリティ スキャン ツールを使用してスキャンすることです。

2.1.9 一部の殺人ツールの使用

2.1.9.1 ルートキットの強制終了

ルートキットは、オペレーティング システムのカーネルを変更したり、命令の実行パスを変更したりして、標準のシステム メカニズムを回避または回避することによって、システム オブジェクト (ファイル、プロセス、ドライバー、レジストリ エントリ、オープン ポート、ネットワーク接続などを含む) を隠すプログラムです。 。ルートキットはUNIXシステムに由来しており、ルートはあらゆる権限を持つ管理者を指し、キットは管理ツールであることから、管理者権限を取得し、権限を超えて利用するツールであると考えられます。ルートキットはサービスを実装するのではなく、ステルス、偵察、制御の 3 種類のサービスを提供します。

ルートキットを使用すると、バックドアを残してファイルやカーネルの変更や置き換えを簡単に実現できます。このような攻撃に対処するために、私たちは対応する対抗手段、つまり私たちの活動を支援する対応する殺害ツールも用意しています。

#1.chkrootkit  --- 网址:http://www.chkrootkit.org 
使用方法:
wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz
tar zxvf chkrootkit.tar.gz
cd chkrootkit-0.52
make sense
#编译完成没有报错的话执行检查
./chkrootkit


#2.rkhunter --- 网址:http://rkhunter.sourceforge.net
使用方法:
Wget https://nchc.dl.sourceforge.net/project/rkhunter/rkhunter/1.4.6/rkhunter-1.4.6.tar.gz
tar -zxvf rkhunter-1.4.6.tar.gz
cd rkhunter-1.4.6
./installer.sh --install
rkhunter -c

RKHunter は、システムがルートキットに感染しているかどうかを専門的に検出するツールで、一連のスクリプトを実行してサーバーがルートキットに感染しているかどうかを判断します。RKHunter でできること:

MD5 チェック、ファイルが変更されているかどうかの検出、
ルートキットによって使用されるバイナリおよびシステム ツール ファイルの検出、
トロイの木馬プログラムの署名コードの検出、
一般的なプログラムのファイル属性が正常かどうかの検出、
システム関連のテストの検出
、隠しファイルの検出、
コア モジュール LKM の検出、
システムがリスニング ポートを開始したことの検出

スクリーンショットを実行します。

ここに画像の説明を挿入

生成されたログはログフォームに記録されます/var/log/rkhunter.log赤い位置は注意が必要です。

2.1.9.2 ウイルスのスキャンと駆除

クラマフ

URL: http://www.clamav.net/download.html

1.yumのインストール

#安装
yum install -y clamav
#更新病毒库
freshclam
#扫描方法
clamscan -r /etc --max-dir-recursion=5 -l /root/etcclamav.log
clamscan -r /bin --max-dir-recursion=5 -l /root/binclamav.log
clamscan -r /usr --max-dir-recursion=5 -l /root/usrclamav.log
#扫描并杀毒
clamscan -r  --remove  /usr/bin/bsd-port
clamscan -r  --remove  /usr/bin/
clamscan -r --remove  /usr/local/zabbix/sbin
#查看日志发现
cat /root/usrclamav.log |grep FOUND

2. ソースコードのコンパイル

#1、安装 zlib:
wget http://nchc.dl.sourceforge.net/project/libpng/zlib/1.2.7/zlib-1.2.7.tar.gz 
tar -zxvf  zlib-1.2.7.tar.gz
cd zlib-1.2.7
#安装一下gcc编译环境: yum install gcc
CFLAGS="-O3 -fPIC" ./configure --prefix= /usr/local/zlib/
make && make install

#2、添加用户组 clamav 和组成员 clamav:
groupadd clamav
useradd -g clamav -s /bin/false -c "Clam AntiVirus" clamav

#3、安装 Clamav
tar –zxvf clamav-0.97.6.tar.gz
cd clamav-0.97.6
./configure --prefix=/opt/clamav --disable-clamav -with-zlib=/usr/local/zlib
make
make install

#4、配置 Clamav
mkdir /opt/clamav/logs
mkdir /opt/clamav/updata
touch /opt/clamav/logs/freshclam.log
touch /opt/clamav/logs/clamd.log
cd /opt/clamav/logs
chown clamav:clamav clamd.log
chown clamav:clamav freshclam.log

#5、ClamAV 使用:
 /opt/clamav/bin/freshclam 升级病毒库
./clamscan –h 查看相应的帮助信息
./clamscan -r /home  扫描所有用户的主目
./clamscan -r --bell -i /bin  扫描bin目录并且显示有问题的文件的扫描结果

ウイルスの検出と駆除の知識に関して言えば、ウイルス ファイルの場所と動作を特定し、ウイルスの検出と駆除を実行するための承認を取得する必要があります。また、通常のファイルを誤って駆除しないように注意して駆除ツールを使用する必要があります。

2.1.9.3 回転数チェック

システムの整合性は、rpm に付属する -Va によって検証できます。すべての rpm パッケージをチェックして、コマンドが置き換えられているかどうかを確認します。

./rpm -Va > rpm.log

すべてが正常に検証された場合は出力は生成されません。矛盾がある場合は表示されます。出力形式は 8 桁の長さの文字列で、各文字はファイルと属性の比較を表すために使用されますRPM データベース内の結果が . (ドット) の場合は、テストに合格したことを意味します。

検証内容の8つの情報の具体的な内容は以下の通りです。
S ファイルのサイズが変更されているかどうか
M ファイルの種類またはファイルのパーミッション(rwx)が変更されているかどうか
5 MD5チェックサムが変更されているかどうかファイルの内容が変更されたかどうか(ファイルの内容が変更されたかどうかがわかります)
D デバイスでは、コードから
L ファイルのパスを変更するかどうか
U ファイルの所有者 (オーナー) を変更するかどうか
G ファイルのグループを変更するか
T ファイルの変更時刻を変更するか

コマンドが置き換えられた場合は、元に戻す必要があります。もちろん、yumなどのコマンドを直接使用して再ダウンロードすることも可能です。

応用例:

#1.查询 ls 命令属于哪一个包
[root@blackstone ~]# rpm -qf /bin/ls
coreutils-8.22-18.el7.x86_64

#2. 先把 ls 转移到 tmp 目录下,造成 ls 命令丢失的假象
[root@blackstone ~]# mv /bin/ls /tmp

#3.利用rpm自带的包检测功能进行检测 --- 很快就检测出了ls命令的缺失
[root@blackstone ~]# rpm -Va > rpm.log
[root@blackstone ~]# cat rpm.log
S.5....T.  c /etc/profile
missing     /usr/bin/ls
........P    /usr/bin/python2.7
S.5....T.  c /etc/my.cnf
.......T.  c /etc/nginx/nginx.conf
.......T.  c /etc/httpd/conf.modules.d/00-proxy.conf
S.5....T.  c /etc/httpd/conf/httpd.conf
S.5....T.  c /etc/sslh.cfg
.......T.  c /etc/sysconfig/sslh
S.5....T.    /usr/sbin/sslh
.......T.  c /etc/selinux/targeted/contexts/customizable_types
S.5....T.  c /etc/selinux/targeted/contexts/files/file_contexts.subs
....L....  c /etc/pam.d/fingerprint-auth
....L....  c /etc/pam.d/password-auth
....L....  c /etc/pam.d/postlogin
....L....  c /etc/pam.d/smartcard-auth
....L....  c /etc/pam.d/system-auth
S.5....T.  c /etc/redis.conf
.M.......    /usr/bin/find
SM5....T.  c /etc/rc.d/rc.local
missing     /var/run/wpa_supplicant
S.5....T.  c /etc/php.ini
S.5....T.  c /etc/sysconfig/authconfig
.......T.  c /etc/httpd/conf.d/ssl.conf
.......T.  c /etc/php-fpm.d/www.conf

#4.移除ls并重新安装,进行命令的修复
[root@blackstone ~]# yum remove ls
Loaded plugins: fastestmirror
No Match for argument: ls
No Packages marked for removal
[root@blackstone ~]# yum install ls
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirror.lzu.edu.cn
 * epel: mirrors.tuna.tsinghua.edu.cn
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
No package ls available.
Error: Nothing to do

#5.测试修复情况
[root@blackstone ~]# ll
total 74212
-rw-r--r--    1 root   root          0 Feb 11 16:23 11
-rw-r--r--    1 root   root          0 Feb 11 16:21 16:21:01
-rw-r--r--    1 root   root          0 Feb 11 16:22 16:22:01
-rw-r--r--    1 root   root          0 Feb 11 16:23 16:23:01

2.1.9.4 Linuxセキュリティチェックスクリプト

Github プロジェクトのアドレス:

https://github.com/grayddq/GScan
https://github.com/ppabc/security_check
https://github.com/T0xst/linux

本を信じるよりは本がないほうがいい、ツールはあくまで補助的なもの、頼りすぎない、問題をいかに解決するかが鍵である。

2.1.9.5 WebShell のスキャンと強制終了 - スキャンと強制終了のさまざまな方法を見つける

通常、私たちは Web シェルの強制終了を支援するソフトウェアを使用します。ただし、一部のトロイの木馬が変形するとwebshell、ハッカーはウェブサイトの巨大なディレクトリ内の特定の小さなファイルの後ろに対応するトロイの木馬を挿入する傾向が強くなります。webshellこれは、変形後に見つけるのが難しいだけではありません。では、webshell署名コードを使用して 1 つずつ検索するという、従来の殺害方法のみを使用できるのでしょうか?

想像してみてください。Web サイトがハッキングされ、攻撃者が隠しバックドアを残した場合、本当にそれを見つけることができるでしょうか? 数百万行のコードを含む大規模および中規模のアプリケーション システムに直面して、各ファイルと各コードを手動でチェックすることは不可能です。

99.9% の検出率を備えた検出エンジンであっても、WebshellWebShell バイパスが存在する可能性があります。さらに、ダーク リンク、Web ページ ハイジャック、ページ ジャンプなどの一般的なブラック ハット SEO テクニックは、手動またはツールによる検出では特定することが困難です。

それを行うための最良の方法は、それを行うことです文件完整性验证元のコードと比較することで、ファイルが改ざんされていないか、どこが改ざんされているかをすぐに知ることができます。もちろん、チームがすでにコードのバージョンを管理できることが前提ですが、個人のウェブマスターであれば、元のコードをバックアップしていると思います。

1. diffコマンド

Linux では、2 つのテキスト ファイル間の違いを比較するために diff コマンドをよく使用します。同様に、1 行のコマンドで 2 つのプロジェクト ファイル間の違いをすぐに見つけることができます。

diff コマンドはテキスト ファイルの差分を比較でき、find コマンドを使用して md5 検証機能に接続すると、ディレクトリ内のすべてのファイルのデジタル サマリーを簡単に実現できます。そうすれば、ここで何をする必要があるのか​​が大まかにわかります。Web サイトのバックアップ ファイルを用意し、そのファイルのルート ディレクトリで find コマンドと検証関数を組み合わせて使用​​し、各ファイルの md5 検証値を生成する必要があります。結果として得られるテキストを形成します。

Web サイトが悪意を持って侵入されたかどうかを判断するには、find コマンドを使用し続けて、Web サイトの対応するディレクトリに概要ファイルを生成するだけです。diff概要ファイルを比較することで、変更されたファイルの場所をすばやく特定し、diffそのファイルを使用してファイルの内容を再度比較し、どの内容を変更する必要があるかを簡単に判断できます。

以下に例を使用してこのプロセスを示します。

#1.创建对应目录,以及文件其中dir1为网站文件dir2为备份文件。注意实际环境中备份文件应当存储到别的设备上去,用的时候在拿出来。
[root@blackstone ~]# mkdir test
[root@blackstone ~]# cd test
[root@blackstone test]# mkdir dir1 dir2 
[root@blackstone test]# echo 'i am batman' > cms.php
[root@blackstone test]# cp cms.php dir1
[root@blackstone test]# cp cms.php dir2

#制造恶意篡改文件的假象
[root@blackstone test]# echo 'i am joker' >> dir1/cms.php

#2.生成对应目录的文件内容数字摘要
[root@blackstone test]# cd dir1
[root@blackstone dir1]# find ./ -type f -exec md5sum {} \; | sort -k 2  > result.txt
[root@blackstone dir1]# cd ../dir2
[root@blackstone dir2]# find ./ -type f -exec md5sum {} \; | sort -k 2  > result.txt

#3.比对摘要文件的不同定位篡改了的文件位置
[root@blackstone test]# diff ./dir1/result.txt ./dir2/result.txt
1c1
< f83ec156bf33dc1d40b4b0e6c81667bd  ./cms.php
---
> 0e3490ccba461affcd7c0bcd20736721  ./cms.php

#4.详细比对文件内容定位文件内容修改点 --- 找到隐藏的小丑!
[root@blackstone test]# diff -c -a -r ./dir1/cms.php ./dir2/cms.php
*** ./dir1/cms.php      2023-03-23 11:55:17.818409595 -0400
--- ./dir2/cms.php      2023-03-23 11:54:50.084956589 -0400
***************
*** 1,2 ****
  i am batman
- i am joker
--- 1 ----

Q: Web サイトのディレクトリに概要ドキュメントを直接生成し、後でその概要ドキュメントを直接比較してみてはいかがでしょうか。ソースファイルを再度バックアップする必要がありますか?
A: ファイルの md5 概要のみを作成した場合、ファイルの場所を特定することしかできませんが、ファイルの内容がどの程度変更されているかはわかりません。

ここまで見ると少し面倒そうに見える diff コマンドは、実はとても便利です。主に概要ファイルの差分を使用して変更されたファイルを見つけます。問題のあるファイルを見つけた後、ファイルの内容の変更内容を比較します。多数のファイルを比較して強制終了する問題を迅速に解決します。

2 MD5検証スクリプト

ここでは、Python を使用して MD5 検証スクリプトの実装を完了します。まずソース コードを見てみましょう (周氏のソース コードに感謝します)。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os
import hashlib
import json

# 网站目录所有文件列表
path_list = []
# 静态文件可以不做hash效验
White_list = ['.js', '.jpg', '.png', '.html', '.htm']

def GetFile(path):
    for dirpath, dirnames, filenames in os.walk(path):
        for dirname in dirnames:
            dir = os.path.join(dirpath, dirname)
            # print dir
            path_list.append(dir)
        for filename in filenames:
            file = os.path.join(dirpath, filename)
            if os.path.splitext(file)[1] not in White_list:
                # print file
                path_list.append(file)
    return path_list


# 使用文件迭代器,循环获取数据
def md5sum(file):
    m = hashlib.md5()
    if os.path.isfile(file):
        f = open(file,'rb')
        for line in f:
            m.update(line)
        f.close
    else:
        m.update(file)
    return (m.hexdigest())


def Get_md5result(webpath):
    pathlist = GetFile(webpath)
    md5_file = {
    
    }
    for file in pathlist:
        md5_file[file] = md5sum(file)
    json_data = json.dumps(md5_file)
    fileObject = open('result.json', 'w')
    fileObject.write(json_data)
    fileObject.close()


def load_data(json_file):
    model = {
    
    }
    with open(json_file,'r') as json_file:
        model = json.load(json_file)
    return model


def Analysis_dicts(dict1, dict2):
    keys1 = dict1.keys()
    keys2 = dict2.keys()
    ret1 = [i for i in keys1 if i not in keys2]
    ret2 = [i for i in keys2 if i not in keys1]
    print u"可能被删除的文件有:"
    for i in ret1:
        print i
    print u"新增的文件有:"
    for i in ret2:
        print i
    print u"可能被篡改的文件有:"
    ret3 = list((set(keys1).union(set(keys2))) ^ (set(keys1) ^ set(keys2)))
    for key in ret3:
        if key in keys1 and key in keys2:
            if dict1[key] == dict2[key]:
                pass
            else:
                print key


if __name__ == '__main__':

    webpath = raw_input("Please enter your web physical path, for example, c:\\\\wwww]. ").lower()
    Get_md5result(webpath)
    dict2 = load_data("result.json")

    methodselect = raw_input("[?] Check the integrity of the file: [Y]es or [N]O (Y/N): ").lower()
    if methodselect == 'y':
        file = raw_input("Please enter the hash file path to be compared: ").lower()
        dict1 = load_data(file)
        Analysis_dicts(dict1, dict2)
    elif methodselect == 'n':
        exit()

使用する方法は上で説明した diff とあまり変わりませんが、スクリプトを数回実行するだけで前の複雑な操作の結果を取得できるのが良い点です。

使用例:nginx次のhtmlフォルダーの MD5 動的検出

#1.创建我们的检测文件夹,写入脚本
[root@blackstone md5chack]# cd /usr/local/nginx/
[root@blackstone nginx]# mkdir md5chack
[root@blackstone nginx]# cd md5chack/

[root@blackstone md5chack]# cp -r ../html/ ./
[root@blackstone md5chack]# ll
total 4
drwxr-xr-x. 4 root root  149 Mar 23 16:00 html
-rw-r--r--  1 root root 2498 Mar 23 16:09 md5.py


#2.第一次获取初始状态的md5校验指纹,并进行重命名
[root@blackstone md5chack]# python md5.py
Please enter your web physical path, for example, c:\\wwww]. /usr/local/nginx/html
[?] Check the integrity of the file: [Y]es or [N]O (Y/N): n
[root@blackstone md5chack]# mv result.json demo.json
[root@blackstone md5chack]# ll
total 8
-rw-r--r--  1 root root    2 Mar 23 16:12 demo.json
drwxr-xr-x. 4 root root  149 Mar 23 16:00 html
-rw-r--r--  1 root root 2498 Mar 23 16:09 md5.py


#3.修改目标文件夹下的一些文件模拟攻击行为
[root@blackstone md5chack]# cd ../html/
[root@blackstone html]# ll
total 28
drwxr-xr-x 2 root root   6 Mar 23 16:14 123
-rw-r--r-- 1 root root  20 Mar 23 16:14 1.php
-rw-r--r-- 1 root root 116 Mar 23 16:14 2.php
-rwxr-xr-x 1 root root 537 Mar 23 16:14 50x.html
drwxr-xr-x 2 root root 102 Mar 23 16:14 cssinjection
-rw-r--r-- 1 root root 194 Mar 23 16:14 fast.php
-rwxr-xr-x 1 root root  14 Mar 23 16:14 index.bk
-rwxr-xr-x 1 root root 406 Mar 23 16:14 index.html
-rw-r--r-- 1 root root  20 Mar 23 16:14 webshell.txt
[root@blackstone html]# mkdir 456
[root@blackstone html]# vim webshell.txt
[root@blackstone html]# rm -f index.bk


#4.再次运行脚本获取结果
[root@blackstone md5chack]# python md5.py
Please enter your web physical path, for example, c:\\wwww]. /usr/local/nginx/html
[?] Check the integrity of the file: [Y]es or [N]O (Y/N): y
Please enter the hash file path to be compared: demo.json
可能被删除的文件有:
/usr/local/nginx/html/index.bk
新增的文件有:
/usr/local/nginx/html/456
可能被篡改的文件有:
/usr/local/nginx/html/webshell.txt



#5.使用diff命令比对文件的内容异同 --- 备份源文件的重要性
[root@blackstone md5chack]# diff -c -a -r ./html/webshell.txt ../html/webshell.txt
*** ./html/webshell.txt 2023-03-23 16:00:37.477998952 -0400
--- ../html/webshell.txt        2023-03-23 16:21:42.281391611 -0400
***************
*** 1 ****
! thos is a webshell
--- 1,2 ----
! thos is a webshell
! i am batman

Python スクリプトを使用すると、対応するディレクトリで発生した悪意のある変更を効率的に見つけることができることがわかります。

3. ファイル比較ツール

キーワード: コード比較ツール。多くの便利なツールが見つかります。一般的なツールは、Beyond Compare と WinMerge です。ここでは、一種の winmerge を示します。

ファイルをクリックすると多方向比較が行われますが、ここに記述するのはディレクトリの絶対パスです。

ここに画像の説明を挿入

クリックして表示:

ここに画像の説明を挿入

ファイルの内容の違いをさらに確認します。

ここに画像の説明を挿入

迅速な位置特定、コンテンツとディレクトリのワンストップ比較が可能ですが、通常の緊急対応プロセスでは、顧客の中で高い権限を持つ担当者が自らソースコードをバックアップする必要があります。そして、そのような殺害計画を実現できるように、ソースコードのセキュリティを確保します。

3. まとめ

紙面の都合上、widnows 緊急対応の基本操作については後の記事でまとめます(載せてませんでした…)。

この文書では、主に緊急対応の概念といくつかの一般的な緊急対応モデルを紹介します。緊急事態対応の通常のプロセスは、準備フェーズ、検出フェーズ、鎮圧フェーズ、根絶フェーズ、復旧フェーズ、要約フェーズであることがわかります。このような複数のサイクルを通じて、企業のセキュリティ基準水位を効果的に改善できます。企業の安全な運営のための品質保証を提供します。

おすすめ

転載: blog.csdn.net/qq_55316925/article/details/129706873