メモと備忘録

メモや備忘録を残します

パスワードは暗号化ではなくハッシュ化!!

とある開発現場で、パスワードが暗号化されてDBに保持されていた事を思い出しました。

パスワードは暗号化ではダメだったはず・・・
という事で調べてみました。

暗号化とは

データを暗号化のアルゴリズムRSA・DES・AES等)に従って、一見解読不能な内容を求めます。
このデータは用意しておいた暗号鍵を用いて、復号する事が出来ます。

ハッシュ化とは

データをハッシュアルゴリズムmd5sha1・sha-256等)に従って、ハッシュ値と呼ばれる規則性のない固定長の値を求めます。
このデータは不可逆変換なので、元のデータへ戻すことは現実的ではありません。

結論

もしも暗号化したパスワードを悪意のある第三者に抜き取られた場合、復号されてしまうかもしれません。
そうでなくとも、パスワードは復元する必要がないものなので、余計なリスクは抱えない方が良いでしょう。
ログイン認証等も、ユーザの入力値をハッシュ化したものと照合すれば可能です。

もちろん、平文で保持なんて事は論外です!

BurpSuiteのExtenderを開発してみる【メソッドの取得】

BurpSuite Extenderで、
どんな事が出来そうかを探っていきたいと思います。


動作的には
 「GETメソッドの場合は赤く表示する」
 「POSTメソッドの場合は青く表示する」
 「リクエストの場合はメソッドを取得する」
 「レスポンスの場合はステータスコードを取得する」
という感じのものを目指します。

package burp;

import java.io.PrintWriter;

public class BurpExtender implements IBurpExtender, IHttpListener,
        IProxyListener
{
    private IBurpExtenderCallbacks callbacks;
    private IExtensionHelpers helpers;
    private PrintWriter stdout;
    private final String EXTENDER_NAME = "Test Extender";

    //
    // implement IBurpExtender
    //

    @Override
    public void registerExtenderCallbacks(IBurpExtenderCallbacks callbacks)
    {
        this.callbacks = callbacks;
        helpers = callbacks.getHelpers();

        // set our extension name
        callbacks.setExtensionName(EXTENDER_NAME);

        // obtain our output stream
        stdout = new PrintWriter(callbacks.getStdout(), true);

        // register ourselves as an HTTP listener
        callbacks.registerHttpListener(this);

        // register ourselves as a Proxy listener
        callbacks.registerProxyListener(this);

    }

    //
    // implement IHttpListener
    //

    @Override
    public void processHttpMessage(int toolFlag, boolean messageIsRequest, IHttpRequestResponse messageInfo)
    {
    	if(messageIsRequest) {
    		IRequestInfo requestInfo = helpers.analyzeRequest(messageInfo);
            stdout.println("Request Method : " + requestInfo.getMethod());
    	}else {
    		byte[] response = messageInfo.getResponse();
    		IResponseInfo responseInfo= helpers.analyzeResponse(response);
            stdout.println("Response Status : " + responseInfo.getStatusCode());
    	}
    }

    //
    // implement IProxyListener
    //

    @Override
    public void processProxyMessage(boolean messageIsRequest, IInterceptedProxyMessage message)
    {
    	if(messageIsRequest) {
    		IRequestInfo requestInfo = helpers.analyzeRequest(message.getMessageInfo());
    		String method = requestInfo.getMethod();

    		if(method.equals("GET")) {
        		message.getMessageInfo().setHighlight("blue");
    		}else if(method.equals("POST")) {
        		message.getMessageInfo().setHighlight("red");
    		}

            //	red, orange, yellow, green, cyan, blue, pink, magenta, gray

    	}else {

    	}
    }

}


f:id:usagigozen:20190203173926p:plain
GETは青色で、POSTは赤色にする


f:id:usagigozen:20190203174037p:plain
リクエストはメソッド、レスポンスはステータスコードを取得する


期待通りの結果です。

processHttpMessage(int toolFlag, boolean messageIsRequest, IHttpRequestResponse messageInfo);
This method is invoked when an HTTP request is about to be issued, and when an HTTP response has been received.

processProxyMessage(boolean messageIsRequest, IInterceptedProxyMessage message);
This method is invoked when an HTTP message is being processed by the Proxy.

BurpSuiteのエディタに反映させたい場合は、processProxyMessageメソッド内で処理をする必要があるのかな。
使える色は「red, orange, yellow, green, cyan, blue, pink, magenta, gray」の9色っぽいです。


とりあえず以上です。


体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 脆弱性が生まれる原理と対策の実践 [ 徳丸 浩 ]

価格:3,520円
(2020/2/20 23:33時点)


基礎からのWebアプリケーション開発入門 Webサーバを作りながら学ぶ (Software Design plusシリーズ) [ 前橋和弥 ]

価格:2,948円
(2020/2/20 23:42時点)

BurpSuiteのExtenderを開発してみる【Hello world編】

今回は、サンプルにある「Hello world」を動かしてみたいと思います。

 

環境はこんな感じです

BurpSuite Community Edition v1.7.36

IDE:Eclipse

言語:Java

 

【1.プロジェクト作成】

Eclipseにて新規プロジェクトを作成し、

前回BurpSuiteを起動して保存したファイルを、下記のようなディレクトリ構成になるように置きます。

 BurpExtender(プロジェクト)

┗src

 ┗burp(パッケージ)

  ┗保存したAPIファイル

 

【2.サンプルの取得】

このページにあるサンプル「Hello world」を、「Download」ボタンからダウンロードします。

そして、ダウンロードしたjavaフォルダにある「BurpExtender.java」を手順1の「保存したAPIファイル」の場所に置きます。

 

portswigger.net

 

【3.Extenderの実行】

プロジェクトをjarにエクスポートし、

BurpSuiteを起動>Extenderタブ>Extensionsタブ>Addボタン>エクスポートしたjarを選択(画像参照)

f:id:usagigozen:20190128005131p:plain

Extenderの読み込み

とすると、Helloworldが実行されます。

 

 

体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 脆弱性が生まれる原理と対策の実践 [ 徳丸 浩 ]

価格:3,520円
(2020/2/20 23:33時点)

基礎からのWebアプリケーション開発入門 Webサーバを作りながら学ぶ (Software Design plusシリーズ) [ 前橋和弥 ]

価格:2,948円
(2020/2/20 23:42時点)

BurpSuiteのExtenderを開発してみる【準備編】

BurpSuiteとは。

Webサーバの脆弱性診断などで使用される事の多い、ローカルプロキシツールです。

 

BurpSuiteを使用すると、

HTTPプロトコルによって通信されているリクエストやレスポンスを確認したり、内容を改竄する事が出来ます。

脆弱性診断をされている方曰く、「性能に比べてコストが安く、コストパフォーマンスが良い」らしいです。

 

そんなBurpSuiteには拡張機能(Extender)というものが用意されており、

公開されているAPIを利用してBurpSuiteに様々な機能を追加する事ができます。

 

という事で、どんなものか触っていこうと思います。

今回はExtenderを作成するにあたり、必要な準備だけの紹介です。

ちなみに公式サイトで公開されているサンプルには「JavaPythonRuby」と用意されていたので、いずれかで作成する事が出来るのだと思います。

私はJavaで進めていきます。

 

【1.BurpSuiteのダウンロード】

まずはPORTSWIGGERのサイトからBurpSuiteをダウンロードしましょう。

私は無料で使用できる「Community」バージョンの、jarファイル形式を使用しています。

portswigger.net

 

【2.javaファイルを揃える】

BurpSuiteを起動し、「Extender」タブから「APIs」タブを選択します。

画面下部の「Save interface files」ボタンを押下すれば必要なjavaファイルが手に入ります。

 

とりあえず以上です。

 

体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 脆弱性が生まれる原理と対策の実践 [ 徳丸 浩 ]

価格:3,520円
(2020/2/20 23:33時点)