あいうえお

あいうえお

【ネットワーク】検出器、センサー

どうも。最近クチャラーが苦手な私です。
今回はかなり長い記事になりそうですが、お付き合いください。
唐突ですが、記事修正を行いました。↓↓↓

第1、[12/9]の記事訂正 なんと、たまたま見つけたのですが
pythonとセキュリティ - あいうえお で、誤りがありました。
最後のソースコードで、「Withブロック」のraw_wordsを
何故か出力するだけというクレイジーなミスをしていたので直しました。

合わせて読みたい!

概要

ネットワーク上での、検出とセンサー(監視)。
情報を監視するためのメソッドです。
様々な方法で情報を収集解析して、
セキュリティを高めようという取り組みです。

センサー&検出器 Introduction

センサーとは、セキュリティ監視や診断用途のデータを
収集するデバイスの総称とします。
その一種として、ネットワープタップがあり、ファイアウォールのログなども利用することができるそうです。

そして、センサーには分類があります。

ネットワーク型センサー
ホスト型センサー

要するに、ネットワークを監視することに長けているか、
はたまた、コンピュータを監視することに長けているかの違いです。

で、これを実装するに当たっての配置を考えていきます。
一応図を作りましたが、わかりづらいです(断言)
f:id:pcplpl:20171213005555p:plain
この様な配置となっております。
まず、種類を分けていきます。

1. インターネット出口のルーターのインターフェースを監視。
2.ルータースイッチと接続するインターフェース監視。
3.ルーターとA(PC)を接続するインターフェース監視。(A=ルーター右側)
4.Aを監視する。
5.スイッチ、ハブの間のインターフェース監視。
6.B(PC)のサーバー上でのHTTPログデータを収集する。(B=ハブの片方)
7.ハブを通過する全TCPパケット収集。

こんな感じになります。

では、それぞれ説明していきます。
1:内部ネットワークと、外部を流れるパケットのみ分かる。
2:下にあるコンピュータとAまたはインターネットの間のパケットが分かる。
3:AのPCが送受信するパケットのみ分かる。
4:BのPCが送受信するパケットのみ分かる。
5:スイッチを通過する全パケット収集が可能である。
6:5のセンサーが収集できるデータの1部のみ収集できる。
7:これは、BとC(ハブのもう片方)とAを除くPC間すべてのパケット取得ができる。

恐らく、非常にわかりづらいと思いますが、あなたの明晰な頭脳を信じます。
要するに、様々な所にセンサーを配置し、ログを収集したり監視したり
することによって、セキュリティを向上するぜ!という話なのです。

これから分かる通り、1箇所にセンサーを配置しても網羅的には把握できません。
ですので、随所に散りばめておくのです。
ですが、これら「網羅的配置」では重複したデータを取得してしまいます。
なので、これらのバランスを考えて配置をするべきです。

データの種類:センサー型ごと取得可能データ

センサーの種別で、取得できるデータがあります。(言わずもがな)

ネットワーク型:パケットを記録したり、診断を行う。
ホスト型:サービスを提供するサーバー内のログインログアウトなどの監視。
サービス型:HTTPやSMTPなどのプロセス監視。

以上の様になります。
具体的に、攻撃などを踏まえて図に落とし説明します。
f:id:pcplpl:20171213011652p:plain
左のPCから、 A B C と名付ける。
インターネットからハブをD、FTP、HTTP周りをEとする。
AはHTTPサーバー且つ、FTPサーバーです。
Bは秘匿のHTTPサーバー。
Cはワークステーションです。

まず、攻撃者がFTPサーバーを探すべく、全PCのPORT21(FTP_PORT)
を探るため、無差別にFTPサーバー探知用PACKETを送りスキャンする。
このスキャンでは、反応がAで検出され、Bでは検出されない。

攻撃者は、暗号化されたWEBサービスを提供するTCPのPORT443に、
GETリクエストを無差別に全PCに送りつけ反応するWEBサーバーを探す。
EではAが反応したことを検出できるが、Eでは操作の内容は不明。

攻撃者は平文サービスを提供するWEBサーバを探し、全PCに
探知用パケットを送る。
Dには検出できるが、Bは平文サービスを提供していないので無視。
なので、Eには残らないが、Bが反応してしまう。
この反応はDにより検出されるので、それらが把握できる。

この様な感じで攻撃と検知が行われます。
因みに、443PORTがHTTPSで、80がHTTPです。
詰まるところ、セキュリティを考えた際、
異なる型のものを組み合わせることによって、詳細にデータを取得します。
それぞれの特性を活かして、セキュリティを高めるということです。

もう少し書きたいところですが、やることがあるし眠いのでこれで。
誰かの役に立つことを願って、それでは。

【数学】線形代数入門、代数学入門

どうも。 最近少し線形代数代数学について勉強をしたので書きます。 なぜ、これらについて勉強をしたかは、 プログラミングの役に立つんじゃね? というのが1つ。 単純に面白そうじゃね? というのがもう1つでございます。 非常に適当な理由で時間を使っている点については、ご容赦ください。

Torについて

Torとは?

リレーシステムにより匿名化を行うソフトです。
ロキシーからプロキシーへという風に続き、エンドポイントへ通信を行い、 アクセス経路以外の出口で暗号化されるため、通信が秘匿化されます。
ロキシーを経由するため、少々アクセス時間がかかってしまいます。
所謂、DeepWebなどを閲覧するためのソフトとしても使われています。
レンダリングエンジンは、Firefoxのものを使用しています。
なので、モダンに対応しているともいえます.(よくわからん)

リレーシステム

上記で示した「プロキシーからプロキシーへ」というのがリレーシステムと言う概念です。
これを用いることで、匿名化を果たしています。
現在、Torのリレープログラムに6000以上のリレーが存在しています。
リレーには種類が3つあります。

1:ガードリレー
2:中間リレー
3:出口リレー

各種リレーについて説明すると、
1 > ネットワークの入り口に当たるのが、「ガードリレー」です。安定した高帯域のものが選ばれます。
2 > ガードリレーから出口トラフィックを中継するためのものです。
3 > リレーの終端に当たるもので、出口となり、最終的な場所にトラフィックを送ります。

http://i.gzn.jp/img/2015/12/24/how-tor-works/00_m.png


具体的な通信手順を示すと、以下のようになります。 以下Wikipediaより

仮想回線構築の概略
以下は、TorクライアントA(発信元)から、TorサーバB、Cを順に経て、行き先D(一般のWebサーバ等)に至る場合の説明である。
Aは、あらかじめ得ているディレクトリリストの中から、無作為的にBとCを選択する。
A→B、仮想回線接続の要求を、A-B間の暗号化通信用のセッション鍵を交換するための情報と共に送信する。
B→A、仮想回線接続の承諾とともに、セッション鍵交換のための情報を送信する。
A-B間、前段までで得られたセッション鍵により、暗号化通信路が得られる。
以後A-B間の通信は、本暗号化通信路を用いて行われる。
A→B、「B-C間で仮想回線接続を要求する送信をすること」を要求する送信をする。
B→C、仮想回線接続の要求を、B-C間の暗号化通信用のセッション鍵を交換するための情報と共に送信する。
C→B、仮想回線接続の承諾とともに、セッション鍵交換のための情報を送信する。
B-C間、前段までで得られたセッション鍵により、暗号化通信路が得られる。
以後B-C間の通信は、本暗号化通信路を用いて行われる。
B→Aに対し、B-C間の仮想回線接続が完了したことを連絡する。
以上により構築されたA-B-C間の仮想回線を通して、AはDと任意の通信を行うことができる。
当該回線における通信のパケットは、Dから見れば、あたかもCが送信元のように見える。
A-B間、B-C間のセッション鍵はそれぞれAとB、BとCしか知らないので、中継により匿名性が得られるとされている。 中継サーバが3つ以上の場合も、上記の手順を繰り返すことで、同様に回線構築が行われる。
セッション鍵交換のためにはDiffie-Hellman鍵交換方式が用いられ、通信の暗号化としてはAESが使用される。なお、仮想回線構築を含
めたTorノード間の全通信は、途中の盗聴や改竄を防ぐために、TLSによる通信の上で行われる。

Torに於いての信頼性

通信手順については理解できたと思いますが、これらの信頼性については説明していません。
Torは以下のような手法を取ることで、信頼性を確保しています。

1:オリジナルデータが暗合される。この暗号はリレー出口で解読される。
2:再び暗号化され、このステップの暗号化を解読します。
3:最終的に、二重に暗号化されたものが再度暗号化されます。この暗号化を解読できるのは、ガードリレーのみです。

つまるところ、Torの暗号化は3重構造でありそれにより信頼性を確保しています。
入り口、中間地、出口で暗号化がなされているのです。

Torを使うことのメリット・デメリット

メリット
・Torは匿名化をすることができる。
・DeepWebなどを閲覧することができる。

デメリット
・速度がかなり低速である。
・Torを弾いてくるサイトも存在する。(リスト公開されているから?)
・信頼性は完全なものではなく、出口の解読を利用したハッキングされる可能性

pythonとセキュリティ

どうも、糞記事量産予定の人です.
まず、K先輩枠を譲っていただきありがとうございます
私は一応セキュリティ科の人間でして、初回はセキュリティについて書こうかと。
色々な本やサイトを見て勉強したので、少しアウトプットしようかなと思います。
コードが行数を取るので、少し薄くなりそうです。

時間が無いので、できたら理論についてもう少し書くかも
あと、ウイルスに付いて等も加筆するかも。

SecにPythonを使うメリットは幾つかあります。

メリット

  • ネットワークモジュールが充実している。

  • 其の中でも、Scapy等の強力な物がある。

  • CythonでCの機能を呼び出せたりしちゃう

デメリットについては、正直良くわかりません。
ポインタなどを扱えない所などでしょうか?
一応ゴリ押せば、使えるらしいですが。
後、少々低速であったり、GUIが難しかったり。

概要

Pythonに於いてのセキュリティのお話。
ローカルハックから、グローバルハックを書いていきます。
この記事は一部Scapyを使用する事にします。
ちなみに、基本的にはPython2系を使用します。

Scapyって?

ざっくりいうと、セキュリティに纏わるPythonのモジュールです。
非常に強力で、様々なものに対応しています。 そして、ターミナルやCMDに「scapy」と打ち込むとインタプリタの様な物が出現。
そこで、Scapyを扱うことが出きます。
例えば、パケットを作る場合

Ether()/TCP()/IP() 

因みに、Scapyのお勉強はこちらでどうぞ。

www.slideshare.net

Pythonでパケットを盗聴してみよう

パケットを盗聴するのは、別にPythonを使わないといけないわけではないのですが、
言語を使って柔軟に対応するという意味では必要かもしれません。

で、盗聴する場合に前提条件となるのが「プロミスキャスモード」というモードです。
これは、簡単に説明すると「汎ゆる宛先のパケットを受け取る」モードになります。
つまり、これによって本来自分宛てではないパケットを取得します。
コードを見てみましょう。

import socket
import os
host = "172.168.0.5"
if os.name== "nt" :
    soc_protocol = socket.IPPROTO_IP
else :
    soc_protocol = socket.IPPROTO_ICMP

sniffer = socket.socket(socket.AF_INET,socket.SOCK_RAW,soc_protocol)
sniffer.bind((host,0))
sniffer.setsockopt(socket.IPPROTO_IP,socket.IP_HDRINCL,1)
#プロミスキャスモード有効
if os.name == "nt" :
    sniffer.ioctl(socket.SIO_RCVALL,socket.RCVALL_ON)
print sniffer.recvfrom(65565)
#無効
if os.name == "nt" :
    sniffer.ioctl(socket.SIO_RCVALL,socket.RCVALL_OFF)

取り敢えず、この様な感じで単一パケットを取得できます。
「if os.name == "nt"」の部分は、OSがWindowsであればという処理で、
Linuxとは違う動作をするようなのでこの様な記述をしています。
sniffer.ioctl」辺りは、プロミスキャスモードのON,OFFをしています。
まあ、あとは見たまんまかな?
これで一応パケットの取得はできるんですが(筈)、なんせこれでは、
1つのパケットしか取得できません。
複数取得しようとすると、ちょっと面倒でコード量がすごいことになるので、
気が向けばGITHUBに上げておきます。

ロキシー使おうぜ

おそらく悪い事をしたいときや、安全にWEBを楽しみたい場合には
ロキシー等が使われると思います
例えば、匿名性がないと行えない操作がある場合や、セキュリティ面での場合。
Pythonでプロキシーを通して、かつリクエストを送信してみようと思います。

因みに、これは余分な部分を削いだ状態で、全体書くの大変だったんですよね。

from __future__ import with_statement
import urllib2

#送信パラメーターをセット
obj = {"actions" : "param"}
#タイムアウト設定の時間
timeout = 0.5

with open('/proxy.txt') as ip_list:
    for ip in ip_list:
        proxy = {'http':'http://{0}'.format(ip)}
        proxy_handler = urllib2.ProxyHandler(proxy)
        opener = urllib2.build_opener(proxy_handler)
        urllib2.install_opener(opener)

        #Request作成
        request = urllib2.urlopen(request,timeout=timeout)
        param = urllib.urlencode( obj )
        request = urllib2.Request(url,param)
        #User-Agentを設定
        request.add_header("User-agent", 'Mozilla/5.0')
        #refererを設定
        request.add_header('Referer', 'http://hoge.com')
        #エンコード方法を設定
        request.add_header('Content-Type', 'application/x-www-form-urlencoded')
        request.add_data(param)

        try :
            #URLを開く(送信)
            request = urllib2.urlopen(request,timeout=timeout)
        except :
            print("error")

objが送信するパラメーター部分の定義で、「opener = urllib2.build_opener(proxy_handler)」
この辺りで、プロキシーをぶっ刺しております。
このプログラムは、予めプロキシーをリスト化しておいて、読み込み、リクエストする方式になっています。
後は、URLを開いてパラメーターを送信して〜という単純な流れです。

色々なパスで総当りしようぜ

WEBサーバーのセキュリティで、ファイルなどのパスは非常に重要です。
予期せぬファイルに落とし穴(脆弱性)が潜んでいたり。
そこで、Pythonでパスを総当りして行く事にします。

import urllib2
import threading
import Queue
import urllib

threads = 30
t_url = "http://hogehoge.com"
word_dict = "./word.txt"
resume = None
user_agent = "Mozilla/5.0"

#辞書ファイルから読み込む
def send_word(word_dict) :
    with open(word_dict) f_raw_word :
        raw_words = f_raw_word.read()

    found_resume = False
    words = Queue.Queue()

    for word in raw_words :
        word = word.rstrip()
        if resume != None :
            if found_resume :
                words.put(word)
            else:
                if word == resume :
                    found_resume = True
                    print(word list from %s)%resume
        else:
            words.put(word)
return words

単純なプログラムで、リストを呼び出してQueueにぶち込んで、総当りしていきます。
で、WEBサイトがダウンしたりした場合に備わっており、Resumeにパスが記憶されています。

因みに、ここでは紹介しきれませんがARPキャッシュポイゾニングや、
データの解析など様々なことができてしまいます。
TCP/IP通信なども簡単に行なえ、機能を組み合わせたら遠隔操作とかも多分簡単にできちゃいます。
ペネトレーションツールなどの作成にも使えそうなので、面白そうです。
以上で、終わります。