SEO対策とセキュリティで企業をバックアップします。

インターネット上のアクセスボリュームUPをお約束します。

Apacheログからセキュリティアタックの解析をする。

Apacheログからセキュリティアタックの解析をする。


ApacheのWEBログから攻撃の手法を読み取るツールをご紹介したいと思います。ツールの言語はPython2.x系で記述されていますが、少し手を入れてpyhon3.xで動作するパッチを作ってみました。2.x系と動作比較した感じは動作良好のようです。

コードGoogleで登録されているapacheログのセキュリティ解析ツール(scalp)

https://code.google.com/archive/p/apache-scalp/

それではダウンロードして準備しましょう。

python3.x系で動作させる場合はこのパッチを適用

実行にはApacheのログが必要です。まずは例えばフォルダー「input」を作ります。そこへアパッチのログを一旦コピーしましょう。次に解析結果を「out」フォルダー入れるために作成します。出力結果はHTML形式にします。尚コマンドラインが長いためシェルで実行する事をお勧めします

scanする攻撃パターン検索用のスキーマ(default_filter.xml)

ブラウザにてhttp://xxx.xxx.xxx.xxx:8000/out/xxxxx.access_log_scalp_Thu-07-Sep-2017.htmlのような感じでアクセスしてみてください。下記のような表示が出てくるはずです。

まとめとして、ログが巨大な場合はsplitコマンドで予め分割して編集してから解析ツールに通すほうが良さそうです。また新たな攻撃パターン手口はdefault_filter.xmlを編集して登録すると拡張できる点は良いですね。

タグ: , , ,

Python3 Bottleフレームワーク入門(その6)- Abort and Redirect


本記事ではアボート処理とリダイレクトについて説明する。abortの出番はWEB上のコンテンツを作る上では重要である。よくあるのはアクセス禁止、ファイルが存在しないケースだろう。特に後者はCMSの世界ではソフトウェア404を使うケースが多い。でもグーグルがソフトウェア404だと正しく認識してくれないため検索インデックスに該当ファイルが無いという認識が持てず古いインデックスを更新しません。結果的に悪い評価になってしまうことがあります。このような場合はabort関数を使用してハードウェア404を返してあげるとベターです。

アボート処理

アボート処理はWEB上で異常を示すエラーコードと共に使用するものです。

リダイレクト処理

リダイレクト処理は何らかの理由があって、最初のURLから別のURLへ転送します。

※この2つの関数redirect(),abort()は必ず実行するとException Errorを起こしますが気にする必要はありません。使うと発生するそのようなものと解釈してください。元々そのような仕様で作られています。つまり何らかの異常を示す際に使う関数であるからと理解するとわかり易いかもしれません。エラーを抑制したい場合はBottleのconfigでcatchallをFalseに設定することで止めることができます。



Python Bottle Framework入門 全12回
1.基礎編サーバ起動
2.リクエストメソッド
3.ORM Peewee (MySQL)
4.ORM Peewee CRUD
5.Cookie And Session
6.Abort and Redirect
7.マルチスレッドWEBサーバ
8.デーモン化
9.Json
10.WSGI on SSL
11.Apache連携起動(外部WSGI) SSL接続
12.Apache連携起動(ReverseProxy)SSL接続

合わせて読みたいPython MySQL操作関連

タグ: , , , ,

Python3 Bottleフレームワーク入門(その5)- Cookie And Session


本チャプターでは、クッキー、セッションまわりについて解説します。クッキーはご存じの通り一度来訪するとその時の行動でアクションした記録が残り次回の来訪時にその情報が適用されてWEB画面に反映される仕組みである。またセッションはログインしている状態を記録し、ページ遷移や次回のブラウザ起動時にログイン無しでページに入れる仕組みなどに使われます。



クッキーの仕組みは標準でBottleから利用できるため特に特殊なライブラリーを新規で導入することはありません。response関数で設置することができます。

クッキーの設定例

下記は、ブラウザーからhttp://xxx.xxx.xxx.xxx/counterを表示させリロードするとその度にカウンタ値があがるプログラムです。サーバを終了してもクッキーが残っているためまた起動してテストすると前回の値から加算されてゆきます。ブラウザをとじて再テストしても同様です。クッキーはブラウザー側に残っているためこのようになります。

クッキーの削除

今度はクッキーのリセット機能を追加しました。下記のようにクッキーのエイジングを0にしてカウンタ値も一旦空にします。これが事実上のクッキーの削除のようなものです。ブラウザーからhttp://xxx.xxx.xxx.xxx/resetを表示させ再度カウンター表示のページに飛ぶとカウンターが1からスタートしていることがわかります。

セッションの機能を使う

セッションの機能を使うにはBottleの場合、Beakerというモジュールを使うことができます。インストールはpipコマンドで 導入してください。

先程のクッキーのカウントアッププログラムと同じ要領でブラウザーからアクセスしてみてください。結果的にクッキーと同じような動作を確認できます。

セッションの削除の様々なパターン

一口に削除と言っても様々なパターンがある。値を初期化する。データを削除する。今のセッションを廃棄する。プログラムの流れ用途によってどれを使うか考えて使いましょう。



Python Bottle Framework入門 全12回
1.基礎編サーバ起動
2.リクエストメソッド
3.ORM Peewee (MySQL)
4.ORM Peewee CRUD
5.Cookie And Session
6.Abort and Redirect
7.マルチスレッドWEBサーバ
8.デーモン化
9.Json
10.WSGI on SSL
11.Apache連携起動(外部WSGI) SSL接続
12.Apache連携起動(ReverseProxy)SSL接続

合わせて読みたいPython MySQL操作関連

タグ: , , ,

Python3 Bottleフレームワーク入門(その3)- ORM Peewee (MySQL)


今回はデータベースを使ったケースを学んでいきましょう。フレームワークでの入門編ではほとんどのケースサンプルで載っているのは、Sqlite3を使ったケースが多いですが、実際の運用を考えて実験するとやはりMySQLでの実験運用が現実的と考える。やはり微妙に書き方が変わる可能性があるためそうした方が良いと思います。


また、今の時代フレームワークでORMを使うのが当たり前になってきているためBottleで利用できるORMの一つpeeweeを紹介したいと思います。やはりORMの利用で飛躍的にDBのCRUD処理が楽ちんになります。

peeweeの導入

peeweeを導入するにあたり今回はMySQLを使用した前提で説明していきたいと思います。

必要なMYSQLドライバーを事前にpipやbrewなどで導入してください。

必要ドライバー

  • MySQL-python
  • PyMySQL

peeweeを導入できたら最初にコードを作る前にMySQLでテーブルを作って見ましょう。既に既存で存在するテーブルからコードを生成する機能が用意されています。

上記のようなデータベースをMySQLで作成してみましょう。このコードをexport.sqlとして保存し、次のようにしてテーブル作成すると簡単で良いと思います。

下記のように指定を行って任意のファイルmodels.pyへ出力をしてすると自動的にORM操作を行う際に必要なテーブルのclassを生成してくれます。

DBから特定ユーザデータを抜き出して表示するプログラムを見てみましょう。

実際にブラウザからhttp://xxx.xxx.xxx.xxx:8080/user/James というようにチェックするためには、テーブルにダミーデータを入れておく必要があります。

◯ テストデータをDBへインサート

これで全ての準備が整ったので、改めてブラウザからhttp://xxx.xxx.xxx.xxx:8080/user/kazuoでアクセスしてみましょう。下記のように表示されたら成功です。



Python Bottle Framework入門 全12回
1.基礎編サーバ起動
2.リクエストメソッド
3.ORM Peewee (MySQL)
4.ORM Peewee CRUD
5.Cookie And Session
6.Abort and Redirect
7.マルチスレッドWEBサーバ
8.デーモン化
9.Json
10.WSGI on SSL
11.Apache連携起動(外部WSGI) SSL接続
12.Apache連携起動(ReverseProxy)SSL接続

合わせて読みたいPython MySQL操作関連

タグ: , , , , ,

Python3 Bottleフレームワーク入門(その2)- リクエストメソッド


今回の記事では、Bottleのリクエストメソッドについて書きたいと思います。


リクエストメソッドってなんだろう!?と思う方もいるでしょう。WEBブラウザーでURLを指定して表示するのはGETというリクエストメソッドです。逆にコンテンツ側からサーバへ送信するような入力フォームのページはPOSTと言います。この2つを取りえず覚えて置くと良いでしょう。


これまでのプログラムの中で@app.route(URLパス)と書いていたのはデフォルトでメソッドを指定しなければGET処理のルーティングでした。Bottleではパラメータでメソッドを指定してルーティングさせる他にもっと簡潔な書き方があります。 以下に示す書き方はどれも同じ処理の書き方です。

メソッドを意識してルーティングするなら下記の書き方がわかりやすくて良いですね。

デコレータは以下のように重ね合わせも可能だ。ログインの場合などはログインする前とログイン認証、ログイン認証した後が考えられる。ユーザ関数の中のどのメソッドで呼び出されたのか判定しロジックを充ててゆくように記述する。判定はクッキーやセッションで認証しているか否かでわかるだろう。

メソッドのデコレータはget(), post(), put(), delete() or patch()が用意されています。



Python Bottle Framework入門 全12回
1.基礎編サーバ起動
2.リクエストメソッド
3.ORM Peewee (MySQL)
4.ORM Peewee CRUD
5.Cookie And Session
6.Abort and Redirect
7.マルチスレッドWEBサーバ
8.デーモン化
9.Json
10.WSGI on SSL
11.Apache連携起動(外部WSGI) SSL接続
12.Apache連携起動(ReverseProxy)SSL接続

合わせて読みたいPython MySQL操作関連

タグ: , , ,

1 2