tixture55’s diary

主にプログラミング関係の日記です。

スレットインテリジェンスとKillDisk

今回はトレンドマイクロブログネタです。結局、ベンダーブログを読むのが最新の攻撃について知る上で一番近道ですね。

 

ウイルスバスターや関連製品の機能

  ルータとそれに接続している機器間のインターネットトラフィックをチェックできます。トレンドマイクロ製品の強みは比較的安価で、自社クローラー製品でネット上の脅威情報を収集し、それを用いて、セキュリティ対策を実施します。

 これがなぜ実現できるかというと、スレットインテリジェンスサービスがファイアウォールやセキュリティ情報イベント管理(SIEM)などのセキュリティ製品へデータを自動的に送り込むからです。これらはクラウドサービスとして提供され、低価格化がなされようとしています。

 

中南米の金融機関を攻撃したKillDiskの亜種

KillDiskは2015年12月末、複数の目的をもったサイバー諜報活動に関連するマルウェア「BlackEnergy」とともに、ウクライナKillDiskは2015年12月末、複数の目的をもったサイバー諜報活動に関連するマルウェア「BlackEnergy」とともに、ウクライナ の電力会社、銀行、鉄道への攻撃に利用されました。

 

KillDiskは数値パラメータで与えられた時間だけ待機した後にPCをショットダウンします。初期値は分に換算すると15です。

 

トレンドマイクロのDeep Discovery

企業ユーザはネットワーク型対策製品「Deep Discovery Inspector」によって、すべてのポートと105以上 の通信プロトコルを監視し、標的型攻撃を検出することができます。

 

まとめ

トレンドマイクロブログを見ていると、やはり最新のパッチを適用しましょうとかバックアップはしっかりねというのが決まり文句となっています。どのレイヤーやどのソースコードに攻撃をうけるかはまったく分かりません。攻撃されても気づかないことも多いです。

 傾向としては、利便性とセキュリティのトレードオフによって脆弱性が生まれるというのが世の常です。GPUの台頭でパスワードクラックも安易になってきてますし、やはり常に最新のセキュリティに動向をみながら、柔軟にセキュリティ対策していくしかないですね。

 

参考サイト

「脅威インテリジェンスサービス」とは何か? 基礎から学び直す (1/2) − TechTargetジャパン セキュリティ

 

django1.11.8のファイル構成やsettings.pyの設定

ファイル構成

djangoでは他の言語のFWにはない特徴的なファイルがあります。

__init__.pyです。これは空のファイルとして置いておきます。なんのためにこのファイルがあるのか調べると、

まず,1つ目は__init__.pypythonスクリプトがあるディレクトリを表す役割をなします.2つ目の役割としては必要なモジュールをimportするなどの初期化処理を記載し,初期化の役割を担う役目があります. 

 と書いてありました。名前のとおり、初期化に関するファイルとして必要なようです。

djangoでは__init.pyがあることによって、importしたいモジュールが複数のディレクトリに散在している場合、この__init__.pyを置くだけでそれらのimportをするという機能を担います。

これは個人的には画期的な機能です。「あれ、このモジュールどこにあったっけ?パスはええと、cdしてっと・・」この思考をしなくてはならないコストがなくなります。賛否両論あるかと思いますが、私的はGOOD!な機能です。

 

settings.pyの役割

読み込むMiddlewareや扱うDBのID、passwordなどを設定します。Mysql5.6ではデフォルトでsql_modeのデフォルト値がSTRICT_TRANS_TABLESになったので、空の値をinsertしようとすると怒られる。にもかかわらず、django側でsql_modeの設定がないと、下記エラーが吐かれる。

WARNINGS:
?: (mysql.W002) MySQL Strict Mode is not set for database connection ‘default’
HINT: MySQL’s Strict Mode fixes many data integrity problems in MySQL, such as data truncation upon insertion, by escalating warnings into errors. It is strongly recommended you activate it. See: https://docs.djangoproject.com/en/1.10/ref/databases/#mysql-sql-mode

 これを出さないようにするには、settings.pyのDATABASESに下記のような設定を追記します。

'OPTIONS': { 'init_command':

    "SET sql_mode='STRICT_TRANS_TABLES'",

},

mallocで構造体のサイズを確保する場合

malloc()の挙動について

malloc()はどんな環境でも常に同じ挙動ではなくて、コンパイラやOSによって動き方が違います。

そもそもmalloc()って?

malloc()はメモリを確保する関数です。返り値はvoid*なので、構造体に適用したい場合は、

構造体へのポインタへのキャストが必要です。

 

aaa = (struct aaa *) malloc(sizeof(struct aaa *)); 

上記の処理では、 構造体aaaへのポインタのサイズ分のメモリを確保しており、

仮に構造体分のメモリが必要になったとき、はみ出した部分への参照となり、メモリ破壊を起こします。よって、構造体のサイズ分割り当てたい場合はsizeofの引数にポインタを入れないようにします。

 

参考サイト

C言語のバグ回避をするための習慣 - Qiita

C言語のコンパイルオプション

Cでいろいろ作ってみようと思い、触ってみました。アルゴリズムとか暗号、TCP通信やapacheモジュールなんかを作れたらいいなぁと思ってます。

 

C言語触るのほんとに久しぶりで、当時はちんぷんかんぷんだったので今はある程度自分なりに満足できるツールが作れればと思います。

 

規模が大きくなるほど管理しづらいんだろうなぁ。ほんと人類にとってJavaは偉大な発明だといって過言ではないですね。

 

Cコンパイルの時のオプション

gccを使ってコンパイルしているのですが、サンプルプログラムによってはオプションを付ける必要があります。

-lm

sqrtなどの算術関数を使う際にはコンパイル時に必要なオプションです。

-c

コンパイルのみを行いたいときに付ける

-o [実行ファイル名]

実行ファイル名を指定したい場合。同ディレクトリに作成される。

-ldir

ヘッダファイル(.h)の参照先にdirを追加する。例:-I/home/myhome/include

 

 

参考サイト

gcc

vimの機能〜grepとか開いたファイルの表示とか〜

 

:lsで一度開いたファイルを一覧表示

一度開いたバッファは:lsで確認し:b バッファ番号で開くことができます。
:lsで一覧表示させたファイルで%がついているものは現在表示しているファイルです。


:cd /var/www/htmlでvimを操作しながらカレントディレクトリを移動できます。これは今:Exで
エクスプローラを開いている場合、その表示がかわるわけではなく、新たに画面分割で開く画面に適用されます。

 

:set encodingで現在の文字コードを確認できます。
:vim {検索文字列} {ファイルパス}でgrepすることができます。


画面分割は同時にファイルを開きながら作業できるので、便利ですが、表示できるファイルの中身が少なくなります。
ファイルの中身を俯瞰しないと効率のよいキーストロークをを導き出すのが困難になってしまうので、ファイルの参照はバッファの切り替えを駆使して行いましょう。

 

↑とqiita記事には書いてありましたが、実際の開発ではマルチディスプレイにして、複数の端末を開いて複数のファイルを表示することになりそう。:q!や:qaをやってしまうとバッファが終了してしまうので、一回画面分割してから:lsするか、:q!を使わず、:mksを使ってセッションを作成する必要があるみたいです。

laravel5.1のルーティング、コントローラ作成とおまけでHTML5

laravel5.1を久しぶりに触ってるのですが、触ってみるとcakeと勝手が違っていて、

「あれ、どうやってたっけ?」と思うところが散見したので、学習記録です。

やはりartisanがあるおかげでcakeよりもrailsに近いフレームワークと言えるのではないでしょうか。

 

laravelのmodel作成

laravel5.1ではmodelはartisanで作ると、app直下にmodelが作られる。

tinkerを使うことで、対話的にmodelを作成できる。またtinkerで作ったデータをsaveでRDBMSにデータとして突っ込める。

 

抽象化されたfilesystemモジュール
filesystems.phpを使うと、扱うファイルストレージを簡単に決められる。S3やlocalなど。 S3やRackspaceドライバーを使用する際は、それに適合するパッケージをcomposerで入れる必要があります。 普通にファイルを保存して公開したい場合はpublic。

 

php artisan storage:link

とすることで、「public/storage」から「storage/app/public」へシンボリックリンクが貼られます。

 

laravel5.1の.envの扱い

ホームディレクトリ直下に.envがありますが、これを触らないとhomesteadってDBへアクセスしようとします。一番最初にはまる所。また、.envは.gitignoreに追加されているのでgit addできません。まぁその方が安心ですね。

 

laravel5.1とlaravel5.4のルーティング

5.4ではroutes.phpがapp直下からなくなって、routesディレクトリ配下のweb.phpにルーティングを設定するようになっています。

 

 

コントローラの作成

php artisan make:controller PagesController

 

  でコントローラが作成できます。できたコントローラの中身は、index()やcrete()といった雛形が自動的に作られています。 これらのデフォルトメソッドが必要ないときは下記のように指定します。

php artisan make:controller --plain PagesController

routes.phpに下記を追加。

Route::get('about', 'PagesController@about'); 

 

マークアップを書いたabout.blade.phpをviews/pagesの下に置いてあげます。

 localhost:8000/aboutにアクセスすると、

BadMethodCallException in Controller.php line 283:
Method [about] does not exist.

 てのが出ました。あれルータ間違えたか・・?とかいろいろ確認していると、

エラーの内容通り、メソッドがないよってことでした。function about()を付け加えると、無事ページが表示されました。ちなみにこのBadMethodCallExceptionはvendor/laravel/framework/src/Illuminate/Routing/Controller.phpに書かれています。親のControllerクラスでメソッドがちゃんとあるかの確認処理が走ってるわけですね。

 

HTML5

base要素・・・ドキュメントにおける全ての相対URLの基準となるURLと、リンク先ドキュメントの開き方を指定する 要素である。headタグ内に一つだけ配置できる。 (リンク先ドキュメントの開き方は、target属性に指定する。)


noscript要素・・・javascriptが使えない環境での挙動を指定できる。
menuとmenuitemタグは最新のfirefoxでないChrome55などは対応していない。

 

参考サイト

初めてのLaravel 5.1 : (3) コントローラーの作成 – ララ帳

Laravel5でmigration実行時にhomesteadユーザーでログインされてしまう

WAFとHyper-Vの構成とかSMB通信キャプチャとか

今回は、WAFとかHyper-Vとか学習した内容のごった煮です。関連は特にないです。

 

WAF製品の検証

WAFにもいろいろ種類があり、ベンダ・製品によって検知の方法が異なります。大別すると、下記2パターン。

例えば、ジェイピー・セキュアの「SiteGuard」はブラックリストを重視している。ジェイピー・セキュアの「SiteGuard」はブラックリストを重視している。 米Citrix Systemsの「Citrix Application Firewall(以下,Citrix)」,米Impervaの「SecureSphere」はホワイトリストを重視

今回はCITRIXのWAFの機能をみながら、高度化した攻撃への対処を紹介する。

 

高度化する攻撃

  •  SQLインジェクションのための文字列がcookieに埋め込まれている場合があります。従来はpostメソッドやgetメソッドなどのパラメータ部分に攻撃用文字列を埋め込むことでwebアプリケーションに渡していましたが、cookieで渡すことでwebアプリの種類によってSQLインジェクションが成功してしまう恐れがあります。
  • IIS/ASPの仕様を利用してSQLインジェクション用の文字列を仕込むパターン。IISでは%をエスケープしてしまうので、下記のような文字列でインジェクションが成功する恐れがある。uni%on se%lect password from data whe%re '1 =' 1 
  • 文字コードが担保されていないwebアプリにXSS用の文字列がutf-7エンコードされた結果、攻撃が成功してしまうパターン

Citlix WAFの機能

  • ページ内のHTMLの解析をして、次に遷移できるURLを限定できる
  • サーバから返されたHTMLの中身を全てチェック。hidden typeのパラメータが次のリクエストに含まれているかなどをチェック
  • Cookieの一貫性をチェック。サーバから送られてきたクッキーとクライアント側のクッキーが一致するかどうかの確認(Citlix WAF限定機能らしい)一致しないときは、クライアントとサーバの間にあるWAFが不正なクッキーを削除する
  • 想定していない直打ちのファイルアクセスを遮断(適切な認証ファイルを経由しているかをチェック)

このように、URLやcookie、パラメータといった複雑な要素が絡みあうwebアプリでもCitlix WAFなら検知できます。これらをブラックリスト型で検知するにはパターンが多すぎるため、限界があり、実質不可能です。

Hyper-Vの構成

Hyper-Vのネットワークはシンプルな構成です。ネットワークでよく初心者がはまる理由は、どのようなコンポーネントで構成され、ネットワークでよく初心者がはまる理由は、どのようなコンポーネントで構成され、 どのような役割を持っているのか、UIがどのコンポーネントを設定しているのかが よくわからないため。

 Hyper-Vのネットワークは「仮想NIC」と「仮想スイッチ」として提供されています。Hyper-Vのネットワークは「仮想NIC」と「仮想スイッチ」として提供されています。 仮想NICVMに接続されたNICです。

 仮想スイッチは仮想NICを接続するためのL2スイッチです。家庭で使われる仮想スイッチは仮想NICを接続するためのL2スイッチです。家庭で使われる L2スイッチより少しインテリジェンスになっていますが、基本的には一緒

 以下は仮想スイッチの作成方法です。

  ●紐付ける物理NICを指定して、デフォルトでチェックされている紐付ける物理NICを指定して、デフォルトでチェックされている 「管理オペレーティングシステムにこのネットワークアダプターの共有を許可する」 のチェックを外して、仮想スイッチを作成

  NICのプロパティをみると、Hyper-V拡張可能仮想スイッチだけにチェックが入っています。 これは、NICの通信機能が剥奪され、VMの通信を通すだけのNICに役割が 変わったことを意味します。

 

MS17-010

リモートからSMBv1を使ったサーバに対し送信すると、リモートでコードが実行される可能性があります。リモートからSMBv1を使ったサーバに対し送信すると、リモートでコードが実行される可能性があります。 OSはwindows Vistawindows server2008  windows7など

 metasploitというツールを使うと、対策されてないマシンだと侵入されてしまうようです。

 

SMB通信のキャプチャ

SMBの通信をwiresharkでキャプチャしても、Encrypted SMB3と表示されるだけです。当然ながら暗号化されています。しかし、SMBのクライアントマシンから管理者権限でコマンドプロンプトを開いて、

netsh trace start provider=Microsoft-Windows-SMBClient 

 として、キャプチャすることができます。キャプチャしたファイルをMessage Analyzerで開くと、SMBで通信したファイル名、通信の成功の可否、ファイルの中身を見ることができます。