乙Py先生のプログラミング教室
初学者のためのプログラミング学習サイト

ハッカー

今回はCTFの問題を解いてみました

解説動画はこちら



CTFとは

さて、まずCTFとは何でしょうか?

CTF(Capture The FLAG )
のことで情報セキュリティの分野で
専門知識や技術を駆使して
隠されているFlag(答え)を見つけ出し
時間内に獲得した合計点数を競う
ハッキングコンテストのことになります

クイズ形式の問題の他
疑似的な攻防戦も有り
以下のような技術が必要となってきます

・ネットワーク
  通信技術、トラフィックのキャプチャ
・フォレンジクス
  情報の秘匿、ログ解析、ファイルフォーマット、データの復元
・Web技術    
  Webアプリケーションの脆弱性、データベースアクセス
・プログラミング
  プログラミング言語、組み込み技術、リバースエンジニアリング
・暗号化技術
  符号化、公開鍵基盤(PKI)
・脆弱性調査
  バグ、攻撃コードの送信

この問題が解ける様になると
次のような技術向上のメリットがあります
 情報セキュリティに対する知識が身につく
 情報セキュリティに限らない広範囲の知識が身につく
 実践的なスキルが身につく
 トラブルシューティングのカンが身につく


世界中でこういった問題が
解けるサイトがありますが
日本にも問題が解けるサイトがあるので
今回はこちらの問題を拝借いたします

https://ctf.cpaw.site/index.php
なお問題を見るにはアカウントが必要です


[Crypto] 1
古典暗号文解読の問題です

シーザー暗号というものがあります
これは元の平文を何文字かシフトさせたものです

アルファベットでシーザー暗号を考えると
平文 : abc

3文字シフト

暗号文 : def

のようになります

平文を暗号化、暗号を平文にするのも
同じプログラムで出来るので
シーザー暗号を作るプログラムを考えれば
この問題を解けます

このようなコードで暗号解読できます
st = 'fsdz{Fdhvdu_flskhu_lv_fodvvlfdo_flskhu}'

def caesar_cipher_encrypt(plaintext , key):
    cipher = ""
    for p in list(plaintext):
        if 'A' <= p <= 'Z':
            cipher += chr((ord(p) - ord('A') + key)%26 + ord('A'))
        elif 'a' <= p <= 'z':
            cipher += chr((ord(p) - ord('a') + key)%26 + ord('a'))
        else:
            cipher += p
    return cipher
    
for i in range(20,26):
    print(i,caesar_cipher_encrypt(st , i))




[PPC]

並べ替えの問題です

配列の中身を大きい順に並べ替えて
くっつけて 並べ替えた後の値 
がフラグになります

配列のソート
数値の文字列化
文字列の連結

これが出来ればこの問題が解けるので
プログラムに関わらず
エクセルやテキストエディターなどでも
解くことは出来ると思います

一応この問題を解くコードはこれです
data = [15,1,93,52,66,31,87,0,42,77,46,24,99,10,19,36,27,4,58,76,2,81,50,102,33,94,20,14,80,82,49,41,12,143,121,7,111,100,60,55,108,34,150,103,109,130,25,54,57,159,136,110,3,167,119,72,18,151,105,171,160,144,85,201,193,188,190,146,210,211,63,207]

txt = 'cpaw{{{0}}}'
txt = txt.format(''.join(map(str,sorted(data,reverse=True))))
print(txt)




[Forensics] 

画像解析の問題です

画像ファイルには位置情報など
様々な情報(Exif情報)が
付加されることがあるので

そこから撮影場所を
特定することも出来たりします

写真に写っている川の名前を特定する問題で
画像名は river.jpg です

画像をみたい方は問題のサイトに
アクセスして手に入れて頂くか
動画の方をみてくださいませ


画像を見るコードはこれです
from PIL import Image
import PIL.ExifTags as ExifTags
import matplotlib.pyplot as plt

file_path = 'river.jpg'

img = Image.open(file_path)

plt.imshow(img)
plt.axis('off')
plt.show()

ここから画像のExif情報を抽出します
Exif情報はかなりたくさんの項目がありますが
GPSの緯度経度を取得します

画像のExif情報を取得するコード
exif = {}
exif = img._getexif()
for k, v in exif.items():
    if k==34853:
        for gk,gv in v.items():
            print(gk,gv)
0 b'\x02\x03\x00\x00'
1 N
2 (31.0, 35.0, 2.76)
3 E
4 (130.0, 32.0, 51.7272)



緯度・経度は一般に度・分・秒で表します
分,秒は時間と同じように60進法になっています
秒に小数点以下の数値をつける場合は
秒の後ろに10進法で表します


ExifのGPSは度分秒なので
10進法にするには変換が必要です
deg , minu , sec = 31.0, 35.0, 2.76
N = deg + minu/60.0 + sec/3600.0

deg2 , minu2 , sec2 = 130.0, 32.0, 51.7272
E = deg2 + minu2/60.0 + sec2/3600.0

print('{0},{1}'.format(N,E))
31.5841,130.547702


あとはこの緯度経度を
地図に打ち込んで見てみましょう

そうすると
スクリーンショット 2022-11-12 10.03.50

こんな場所でした

拡大してみると
スクリーンショット 2022-11-12 10.04.13

鹿児島県にある川の
陸橋の上あたりから
取られた写真であることが分かります

この川の名前が答えですね




[Crypto] 2

最後は
次のC言語のコードを実行すると
回答が得られる問題です

元のCのプログラムを見てみると
暗号を平文に直すアルゴリズムのようでした

C言語が分かる方は
そのまま実行すれば答えば出てきます

C言語が分からない人は
他の言語に直すのもアリです

Pythonに直してみると
次の様なコードになります

flag = 'ruoYced_ehpigniriks_i_llrg_stae'

for key in range(2,7):
    answer = ''
    for i in range( key - 1, len(flag)+1,key):
        for j in range(i , i-key , -1):
            idx = j
            if j < len(flag):
                answer+=flag[idx]

    print(x , 'cpaw{{{0}}}'.format(answer))


まとめ
CTFには
暗号解読やフォレンジックスなど
プログラミングで解ける問題も
多く含まれています

プログラミング技術の向上意外にも
セキュリティー知識を身に付けるための
問題が数多くあるので
これを解ける様になると
セキュリティーに関する技術力の
向上が見込めると思います

それでは

最近セキュリティー界隈を賑わす
大きな金融事件が発生しました。

これを気にセキュリティーの意識を高めて
対策できるようにしていきまっしょう。

解説動画はこちら


さて

まずはハッカーについてです。

よく誤解されていますが
ハッキングの語源で有るhack自体には
それほど悪い意味はありません。

ハッカーは
コンピュータや電子機器等に
深い技術的知識を持ち
その知識を利用して技術的な課題を
クリアする人々のこと
といった位置付けです。

lifehack
hackathon
といった言葉があるように

hackといった言葉には
向上させる、より高めるといった
意識が含まれる言葉だと思っています。

破壊行為あるいは
不正アクセスを伴う場合は
クラッカーと呼び
区別されているので

悪いことをする人は
クラッカーの方です。


ここからは主な手口を見ていきましょう。
・ソーシャル・エンジニアリング
・スパムメール
・マルウェアの配布
・サーバーへの攻撃

などがあります。

ソーシャル・エンジニアリング

人間の心理的な隙や行動ミスにつけ込んで
情報を入手する方法のことです。
・身分を詐称して暗証番号を聞き出す
・嘘の情報を流してパスワードを変更させる
・画面越しに暗証番号を覗き見する
・機器を設置して情報を盗む(スキミング)
などの行為が挙げられます。

スパムメール

宣伝目的で一方的に送りつけられる
電子メールのことです。
・身分を詐称して情報を聞き出す(フィッシング)
・送信元を詐称して迷惑な情報を流す
・サイトに誘導してマルウェアを植え付ける
・大量にメールを送りつけて業務を妨害する
などの行為で迷惑なものを送りつけてきます。

マルウェア

悪意のある有害なソフトウェアのことです。
(malicious software)
・ウィルス
・トロイの木馬
・キーロガー
・ボット(bot)
・ランサムウェア
などが有名なところですね。

ウィルスについて

PCやスマートフォンなどの記憶媒体を持つ
コンピューターに侵入し内部のファイルを改変し
増殖してしまうプログラム

これに感染するとコンピューターを乗っ取られたり
色々な不貞行為に巻き込まれます。

トロイの木馬について

一見無害なファイルやプログラムに
偽装した上でコンピューターに侵入したあと
悪意のある振る舞いをするプログラム

キーロガーについて

キー入力を監視しそれを記録するソフトウェア
もしくはハードウェア

最近だとTikTokが入力情報を外部に
漏らしているなんて報道がありましたね。


ここからは攻撃方法についてです。
・SQLインジェクション
・クロスサイトスクリプティング
・クロスサイトリクエストフォージェリ
・セッションハイジャック
・ブルートフォースアタック
・逆ブルートフォースアタック
・バッファオーバーラン
・バッファオーバーフロー
・DoS攻撃
・DDoS攻撃
・ボットネット


SQLインジェクション

アプリケーションが想定しない
SQL文を実行させることにより
データベースシステムを
不正に操作する攻撃方法のことです。

SELECT * FROM users
WHERE id=admin&pw=' or '1' = '1'

のようにパスワード部分などを
不正なクエリになるような
データを注入する方法です。

結構昔からありますね。

アプリケーション側での
バリデーションなどで
不正なコードの侵入を防ぐのが
一般的ですね。

Lord of SQLInjectionというサイトで
体験できます。

クロスサイトスクリプティング

ユーザーがWebページにアクセスすることで
不正なスクリプトが実行されてしまう
脆弱性または攻撃手法のことです。
スクリーンショット 2020-09-12 18.39.51


クロスサイトリクエストフォージェリ

Webアプリケーション利用者自身が
意図しない処理が実行されてしまう
脆弱性または攻撃手法のことです。

クロスサイトスクリプティングと似ていますね。

スクリーンショット 2020-09-12 18.39.58

セッションハイジャック

WEBアプリケーションの
セッション情報を盗み見て
なりすまして利用を行う手法です。

URLにセッション情報が含まれるような作りだと
結構盗み見ができてしまいます。

スクリーンショット 2020-09-12 18.40.04

ブルートフォースアタック

暗号解読方法のひとつで
可能な組合せを全て試すやり方です。

総当たり攻撃です。

一般的にはユーザーIDを固定して
パスワードを総当たりで試したりします。


スクリーンショット 2020-09-12 18.40.14

逆ブルートフォースアタック

上の方法とは逆にパスワードを固定して
ユーザーID等を総当たりで試す方法です。

ユーザーIDなどが大量に必要ではあるので
そこまで一般的では無いものの
最近の事件ではこの手法が
使われた可能性が高いようですね。

スクリーンショット 2020-09-12 18.40.20


DoS攻撃
(Denial of Service attack)

システムのサービスに処理能力を上回る大量のデータを
送りつけ、サービスを遅延、停止させる攻撃です。

大量のリクエストや、大容量データを
送りつけてサーバーを攻撃します。

昔、田代砲とか流行りましたね。

スクリーンショット 2020-09-12 18.40.27


DDoS攻撃

DoS攻撃を対象のウェブサイトや
サーバーに対して複数のコンピューターから
大量に行う攻撃のことです。

事前に他社のコンピューターを乗っ取り
ボットネットを構築し、攻撃態勢を
整えたのちに攻撃を仕掛けます。
スクリーンショット 2020-09-12 18.40.38

対策方法
・ネットワークの監視
・OSのアップデート
・ファイアーウォール
・脆弱性の検出
・不正検出
・パスワードの強化
・認証の強化

個人レベルで出来る対策は
こんなことぐらいですね。

セキュリティーはあんまり詳しく無いですが
必要最低限の知識は持っておきたいと思います。

最後に
ハッカーが活躍する作品です。
・BLOODY-MONDAY 主人公 高木藤丸
・ドラゴン・タトゥーの女 リズベット
・スニーカーズ 
・ソードフィッシュ
・スマホを落としただけなのに

どれも好きな作品で
特に「ソードフィッシュ」は
20回以上見ている大好きな作品です。

これを見てハッキング関連調べましたねえ。
最近だと「スマホを落としただけなのに」
なかなか面白かったですね。

興味がある方はここら辺を
調べていただければと思います。

よりいっそうセキュリティー意識が高まり
安全性の高いサービスになっていくことを願います。

それでは。

このページのトップヘ