hacktricks/network-services-pentesting/3260-pentesting-iscsi.md
2023-07-07 23:42:27 +00:00

15 KiB
Raw Blame History

3260 - Pentesting ISCSI

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

基本情報

コンピューティングにおいて、iSCSIInternet Small Computer Systems Interfaceの略であり、データストレージ施設をリンクするためのインターネットプロトコルIPベースのストレージネットワーキング標準です。これにより、TCP/IPネットワーク上でSCSIコマンドを輸送することで、ストレージデバイスへのブロックレベルのアクセスが提供されます。iSCSIはイントラネット上でのデータ転送や長距離でのストレージ管理に使用されます。これは、ローカルエリアネットワークLAN、広域ネットワークWAN、またはインターネットを介してデータを転送するために使用でき、場所に依存しないデータの保存と取得を可能にすることができます。

このプロトコルでは、クライアントイニシエータがリモートサーバー上のストレージデバイスターゲットにSCSIコマンドCDBを送信することができます。これはストレージエリアネットワークSANプロトコルであり、組織がストレージをストレージアレイに統合する一方で、データベースやWebサーバーなどのクライアントにローカルに接続されたSCSIディスクの幻想を提供します。これは主にFibre Channelと競合していますが、通常専用のケーブルが必要な従来のFibre Channelとは異なり、既存のネットワークインフラストラクチャを使用して長距離で実行することができます。

デフォルトポート: 3260

PORT     STATE SERVICE VERSION
3260/tcp open  iscsi?

列挙

iSCSIサービスのペンテストを開始する前に、まずはターゲットシステムの列挙を行う必要があります。以下に、iSCSIサービスの列挙に役立つツールとテクニックをいくつか紹介します。

Nmapスクリプト

Nmapは、iSCSIサービスの列挙に役立つさまざまなスクリプトを提供しています。以下は、いくつかの便利なスクリプトの例です。

  • iscsi-infoiSCSIサーバーの情報を取得します。
  • iscsi-enum-targetsiSCSIターゲットを列挙します。
  • iscsi-bruteiSCSIサーバーへのブルートフォース攻撃を実行します。

これらのスクリプトを使用することで、iSCSIサービスに関する重要な情報を収集することができます。

Wireshark

Wiresharkは、ネットワークトラフィックをキャプチャし、解析するための強力なツールです。iSCSIサービスの列挙には、Wiresharkを使用してiSCSIトラフィックをキャプチャし、解析することが有効です。iSCSIトラフィックには、ターゲットシステムのIPアドレスやポート番号などの重要な情報が含まれている場合があります。

iSCSI Discovery

iSCSIディスカバリは、iSCSIサーバーが提供するターゲットを特定するためのプロセスです。iSCSIディスカバリには、以下の2つの主要な方法があります。

  • SendTargetsiSCSIサーバーに対してSendTargetsリクエストを送信し、利用可能なターゲットを取得します。
  • iSNSiSNSInternet Storage Name Serviceを使用して、iSCSIターゲットを特定します。

これらの方法を使用して、ターゲットシステムのiSCSIサービスに関する情報を収集することができます。

iSCSIサービスの列挙は、ペンテストの重要なステップです。これにより、攻撃者はターゲットシステムの脆弱性を特定し、攻撃の手法を計画することができます。

nmap -sV --script=iscsi-info -p 3260 192.168.xx.xx

このスクリプトは、認証が必要かどうかを示します。

ブルートフォース

LinuxでのISCSIのマウント

注意: ターゲットが発見されると、異なるIPアドレスでリストされる場合があります。これは、iSCSIサービスがNATまたは仮想IP経由で公開されている場合に起こります。このような場合、iscsiadminは接続に失敗します。これには2つの調整が必要です。1つは、自動的に作成されたードのディレクトリ名を変更すること、もう1つはこのディレクトリ内に含まれるdefaultファイルを変更することです。

例えば、123.123.123.123のポート3260でiSCSIターゲットに接続しようとしています。iSCSIターゲットを公開しているサーバーは実際には192.168.1.2にありますが、NAT経由で公開されています。isciadmは、_公開_アドレスではなく、_内部_アドレスを登録します。

iscsiadm -m discovery -t sendtargets -p 123.123.123.123:3260
192.168.1.2:3260,1 iqn.1992-05.com.emc:fl1001433000190000-3-vnxe
[...]

このコマンドは、次のようにファイルシステムにディレクトリを作成します:

/etc/iscsi/nodes/iqn.1992-05.com.emc:fl1001433000190000-3-vnxe/192.168.1.2\,3260\,1/

ディレクトリ内には、ターゲットに接続するために必要なすべての設定が含まれたデフォルトファイルがあります。

  1. /etc/iscsi/nodes/iqn.1992-05.com.emc:fl1001433000190000-3-vnxe/192.168.1.2\,3260\,1//etc/iscsi/nodes/iqn.1992-05.com.emc:fl1001433000190000-3-vnxe/123.123.123.123\,3260\,1/ に名前を変更します。
  2. /etc/iscsi/nodes/iqn.1992-05.com.emc:fl1001433000190000-3-vnxe/123.123.123.123\,3260\,1/default 内の node.conn[0].address の設定を、192.168.1.2 の代わりに 123.123.123.123 を指すように変更します。これは、次のようなコマンドで行うことができます:sed -i 's/192.168.1.2/123.123.123.123/g' /etc/iscsi/nodes/iqn.1992-05.com.emc:fl1001433000190000-3-vnxe/123.123.123.123\,3260\,1/default

リンク内の手順に従って、ターゲットをマウントすることができます。

WindowsでISCSIをマウントする

手動列挙

sudo apt-get install open-iscsi

まず最初に、IPアドレスの背後にあるターゲットの名前を特定する必要があります

iscsiadm -m discovery -t sendtargets -p 123.123.123.123:3260
123.123.123.123:3260,1 iqn.1992-05.com.emc:fl1001433000190000-3-vnxe
[2a01:211:7b7:1223:211:32ff:fea9:fab9]:3260,1 iqn.2000-01.com.synology:asd3.Target-1.d0280fd382
[fe80::211:3232:fab9:1223]:3260,1 iqn.2000-01.com.synology:Oassdx.Target-1.d0280fd382

注意してください。それは、ターゲットに到達できるインターフェースのIPとポートを表示します。使用したものとは異なる内部IPや異なるIPを表示することもあります。

次に、各行の印刷された文字列の2番目の部分最初の行から_iqn.1992-05.com.emc:fl1001433000190000-3-vnxe_キャッチして、ログインを試みます

iscsiadm -m node --targetname="iqn.1992-05.com.emc:fl1001433000190000-3-vnxe" -p 123.123.123.123:3260 --login
Logging in to [iface: default, target: iqn.1992-05.com.emc:fl1001433000190000-3-vnxe, portal: 123.123.123.123,3260] (multiple)
Login to [iface: default, target: iqn.1992-05.com.emc:fl1001433000190000-3-vnxe, portal: 123.123.123.123,3260] successful.

その後、logoutを使用してログアウトすることができます。

iscsiadm -m node --targetname="iqn.1992-05.com.emc:fl1001433000190000-3-vnxe" -p 123.123.123.123:3260 --logout
Logging out of session [sid: 6, target: iqn.1992-05.com.emc:fl1001433000190000-3-vnxe, portal: 123.123.123.123,3260]
Logout of [sid: 6, target: iqn.1992-05.com.emc:fl1001433000190000-3-vnxe, portal: 123.123.123.123,3260] successful.

さらなる情報は、--login/--logoutパラメータを使用せずに見つけることができます。

iscsiadm -m node --targetname="iqn.1992-05.com.emc:fl1001433000190000-3-vnxe" -p 123.123.123.123:3260
# BEGIN RECORD 2.0-873
node.name = iqn.1992-05.com.emc:fl1001433000190000-3-vnxe
node.tpgt = 1
node.startup = manual
node.leading_login = No
iface.hwaddress = <empty>
iface.ipaddress = <empty>
iface.iscsi_ifacename = default
iface.net_ifacename = <empty>
iface.transport_name = tcp
iface.initiatorname = <empty>
iface.bootproto = <empty>
iface.subnet_mask = <empty>
iface.gateway = <empty>
iface.ipv6_autocfg = <empty>
iface.linklocal_autocfg = <empty>
iface.router_autocfg = <empty>
iface.ipv6_linklocal = <empty>
iface.ipv6_router = <empty>
iface.state = <empty>
iface.vlan_id = 0
iface.vlan_priority = 0
iface.vlan_state = <empty>
iface.iface_num = 0
iface.mtu = 0
iface.port = 0
node.discovery_address = 192.168.xx.xx
node.discovery_port = 3260
node.discovery_type = send_targets
node.session.initial_cmdsn = 0
node.session.initial_login_retry_max = 8
node.session.xmit_thread_priority = -20
node.session.cmds_max = 128
node.session.queue_depth = 32
node.session.nr_sessions = 1
node.session.auth.authmethod = None
node.session.auth.username = <empty>
node.session.auth.password = <empty>
node.session.auth.username_in = <empty>
node.session.auth.password_in = <empty>
node.session.timeo.replacement_timeout = 120
node.session.err_timeo.abort_timeout = 15
node.session.err_timeo.lu_reset_timeout = 30
node.session.err_timeo.tgt_reset_timeout = 30
node.session.err_timeo.host_reset_timeout = 60
node.session.iscsi.FastAbort = Yes
node.session.iscsi.InitialR2T = No
node.session.iscsi.ImmediateData = Yes
node.session.iscsi.FirstBurstLength = 262144
node.session.iscsi.MaxBurstLength = 16776192
node.session.iscsi.DefaultTime2Retain = 0
node.session.iscsi.DefaultTime2Wait = 2
node.session.iscsi.MaxConnections = 1
node.session.iscsi.MaxOutstandingR2T = 1
node.session.iscsi.ERL = 0
node.conn[0].address = 192.168.xx.xx
node.conn[0].port = 3260
node.conn[0].startup = manual
node.conn[0].tcp.window_size = 524288
node.conn[0].tcp.type_of_service = 0
node.conn[0].timeo.logout_timeout = 15
node.conn[0].timeo.login_timeout = 15
node.conn[0].timeo.auth_timeout = 45
node.conn[0].timeo.noop_out_interval = 5
node.conn[0].timeo.noop_out_timeout = 5
node.conn[0].iscsi.MaxXmitDataSegmentLength = 0
node.conn[0].iscsi.MaxRecvDataSegmentLength = 262144
node.conn[0].iscsi.HeaderDigest = None
node.conn[0].iscsi.DataDigest = None
node.conn[0].iscsi.IFMarker = No
node.conn[0].iscsi.OFMarker = No
# END RECORD

基本的なサブネット列挙プロセスを自動化するスクリプトが iscsiadm で利用可能です。

Shodan

  • port:3260 AuthMethod

参考文献

{% embed url="https://bitvijays.github.io/LFF-IPS-P2-VulnerabilityAnalysis.html" %}

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥