diaryこの広告は、90日以上更新していないブログに表示しています。導入してみましたが、いたるところで詰まったのでメモしておきます。BにPhoenixを導入する。今時何で初代を使っているのだろう。Phoenix」などのワードで検索すると、多くの記事で以下のような導入方法が紹介されています。local.hexの実行の時点で失敗しました。エラー文の画像はありませんが、以下のような内容です。~の部分も同様のエラーで失敗します。stackoverflow.comエラー文から察するに、SSLが有効になっていないことが原因のようです。VMの再導入を試みましたが、無駄のようです。VMをソースコードからビルドすることを試みます。VMをビルドしてSSLを有効にする方法は以下の記事を始めとして多くの記事で紹介されているように、kerlというバージョンマネージャを使用すれば容易に行うことができますが、コンパイルオプションが曲者でした。qiita.com紆余曲折あり、私の環境ではオプションを以下のようにすることでようやくSSLが有効になりました。Piのスペックでは数時間から半日ほど時間を要しました。VMをソースコードからビルドし、Elixirの環境を導入します。elixirで問題ありませんでした。phoenix.serverとすることで導入完了の予定でしたが、ここで別の問題が発生しました。installでエラーが発生し、失敗する、というものでした。コンパイルが多く、ある程度時間を要しましたが、実際にブラウザからアクセスでき、同時にログ出力も確認されました。Piにとってはある程度の速度が出ている・・・のか?というところです。FINALに参加してきました。2016.seccon.jp午前中から昼過ぎまでWeb、Forensics、Binaryについての講義が行われ、最後に参加者全員でCTFを行いました。今回のCTFは初の400人規模のCTFとのことで、独特の雰囲気だったことを覚えています。このCTFは講義の復習+αのような内容で、難しくも楽しかったです。私が解けた問題は以下の通りです。Webの「もぐもぐ」問題、Forensicsの「あけてみよう」問題、Binaryの「HiddenFlag」問題は今思うとあと1歩で解くことができたような(気がする)問題だったので、悔しい限りです。後でちゃんと解こうと思います。upスクリーンショットの撮り忘れにより、(特にWebの)情報量が少ないことをお許しください。フラグの形式はctf4b{文字列}です。1=1を入力すると、フラグが表示されました。you.提示されたURLを開くと、「あなたは管理者(admin)ではない」(曖昧)といったメッセージが表示されており、問題から、ブラウザの拡張機能を使用すればよいのでは?と想像しました。演習環境のブラウザ(Chrome)には、EditThisCookieという拡張機能があり、Cookieの値を参照、変更することができるため、使用してみると、admin(といった名前)のCookieがfalseの値を持っていることが確認できました。そこで、この値をtrueに変更し、リロードするとフラグが表示されました。Hierarchy)を見ると、以下のようにHTTPでいくつかパケットが飛んでいることが分かりました。これらのパケットを眺めていると、無数のctf4b{}の文字が。"ctf4b"とすると、フラグが出てきました。(正規表現で検索するなど、より理論的な解法は多々あるかと思われる)Binary復習2つのセクションのアセンブリの処理を追った結果得られる最終的なeaxの値を"_(アンダーバー)"で結合したものをフラグとする、といった問題でした。1つ目のセクションではeaxの初期値を3として、8倍したあと、3を引き、さらに2を足す、といった処理をしていたので、最終的なeaxの値は23となったと思います。2つ目のセクションでは、ループのインデックスが1から5まで増加する計5回のループ中に、毎回eaxに対してループインデックスが乗算されるような挙動に思えたため、5の階乗、つまり120が得られ、ctf4b{23_120}をsubmitした結果通ったと思います。2016の22日目の記事です。本年度の私は、いろいろなデータをCSVファイルで吐かせて、そのデータ整理を行っていました。データ整理の際、表計算ソフトが重い、そこまで面倒なことはさせない、といった場合のデータ整理でしたら、シェルスクリプトとgnuplot(時々awk)でこなすことができます。Windowsの登場でWindowsでもbashのスクリプトを書くことが可能になりましたので、お勧めしたいと思います。(表計算ソフトが重かったりしますし。)以降、今年1年で私が得られた知見について書き連ねていきます。大まかな流れは以下の通りです。して、今回取り上げるのは平均と分散、最大値(最小値)です。今回は、CSVファイル(hoge.csv)が以下のような構成をしていることを想定します。データつまり、ファイルの2列目を使用したい場合です。平均bashで平均値を求めたい場合は、awkを使用して1行で書くことができます。平均値meanは、以下のコードで求めることができます。awkのオプション、-Fでファイルのデリミタ(区切り文字)である","を指定しています。m/NR;}')awkのオプション、-Fでファイルのデリミタ(区切り文字)である","を指定し、ファイル中の2列目($2)の総和をとり、行数(NR)で割るのみです。先ほど求めた平均値meanを用いて、分散varianceは容易に求めることができます。m/NR;}")meanの例とは異なり、awkの引数をダブルクォートで囲んでいます。これにより、列数を指定する$はエスケープが必要ですが、代わりにbashの変数展開を用いることができますので、分散を楽に求めることができます。(もっと楽な方法があるかもしれません)最大値(最小値)最大値は、awkを用いて次のコードで求めることができます。m}')最小値はこのコードの不等号を入れ替えるだけで求めることができます。hoge.csvの2列目がすべて0の場合、結果として空の文字が返ってくるようです。そのため、awkのBEGINセクションで初期値を与えてあげるのが無難化と思われます。ファイル整理ファイル整理として、例えばファイルの分離にはheadやtailコマンドで行うことができ、ファイルの結合にはcatコマンドでファイルを全て指定することで行うことができます。本記事で着目するのは、ファイルの列結合です。catコマンドで行うことができるのはファイルを縦に結合する場合です。ファイルを列で結合するには、joinコマンドを用います。hoge.csvの同様のファイル形式を持つfuga.csvがある場合、その2つのファイルを同一キーで列結合するには、以下のコマンドで行うことができます。hogefuga.csvデリミタを-tオプションで指定し、標準出力に結果が出力されるため、結合後ファイル(hogefuga.csv)に記録します。joinコマンドはデフォルトでは1列目をキーに、2列目をデータとして処理します。キーとなる列とデータ列を明示的に指定する場合は、それぞれ-1、-2オプションによって列番号を指定することで処理が可能です。このjoinコマンドは同時に2ファイルのみを結合可能という制約がありますので、3ファイル以上を結合したい場合はmktempコマンドなどで一時ファイルを生成してから順番に結合する必要があります。グラフ化gnuplotを使う際に多用した機能について述べます。","とすることで、読み込むファイルのデリミタを","に指定します。プロット時の簡単な数値処理グラフを描画する際、ちょっとした規格化や簡単な単位調整等が必要な場合があります。ある列のすべての値に対して同じ演算を施したい場合、gnuplotで描画する場合に処理を行うことができます。通常、hoge.csvの1列目を第1軸に、2列目を第2軸として描画を行う場合、以下のようなコマンドをgnuplotでは実行します。1:2例えばデータを1000倍して表示したい場合、以下のようなコマンドを実行します。1:($2*1000)関数近似gnuplotでは、関数近似も容易に行うことができます。hoge.csvの1列目をx軸、2列目をy軸の値としてy=ax2+bx+cの式で近似したい場合は、以下のコマンドを実行します。a,b,cこのコマンドでは、f(x)としてフィッティング先の関数を、via以降で最適化するパラメータを列挙する必要があります。フィッティング結果(係数の値、誤差)は、標準出力に出力されるとともに、logファイルが生成され、そこに書き込まれます。複数のcsvファイルを同時に描画したい場合があるかと思います。gnuplotではsprintf関数をサポートしているため、以下のような構文を用いることができます。5.0以降では、描画時ループ構文をサポートしましたので、以下のような構文を用いることができます。文字列処理や使用ファイル数が煩雑になる場合、bashのスクリプトでgnuplotのスクリプトファイルを自動生成することも手です。bashでは文字列内の変数展開が可能ですので、ファイル名の指定が容易に可能です。まとめbashとgnuplotを用いることで、簡単なデータ整理を行うことができます。個人的にはjoinコマンドにより、表計算ソフトでの負担が大きく減るように思います。Calendarは@emaxserさんの担当です。「何か頑張る」とのことなので何やら楽しみです。無理しない程度に頑張っていただきたいです。(時々awk)でデータ整理!Tweet広告を非表示にするもっと読むコメントを書く2016-08-15セキュリティ・キャンプ2016全国大会に参加しました8月9日~13日の4泊5日にわたって開催されたセキュリティ・キャンプ全国大会2016に参加してきました。組み込みリアルタイムOSとIoTシステム演習DAY1会場到着まで事情により参加が遅れたため、多くの方と同時に交流できるチャンスの1つを逃してしまうというところから私のセキュリティ・キャンプは始まりました。遅れて参加した私にも到着早々話しかけてくださった方に本当に感謝感謝です。特別講義サイバーディフェンス研究所の福森さん、日本サイバー犯罪対策センター(JC3)の間仁田さんによる講義が行われました。福森さんの講義では技術とは何か、技術を何に使うのかを考える機会になりました。間仁田さんの講義では、犯罪とは何か、セキュリティに関する犯罪をどのように複数の機関で解決するか、といったことを考えさせられました。DAY2専門(1)、専門(2)概要:前半でPC上でパケットを生成やキャプチャーするプログラムを自作することにより、パケットの構成を理解します。ル出力のみを使って10BASE-Tのフレームシーケンスを実際に送出する演習を行います。この講義で、前半ではOSI参照モデルにおける2層のレベルでパケットに触れ、後半では1層のレベルでパケットに触れて講義が行われました。Arduinoのボードからパケットを送信する、といったことを行いました。普段マイコンで遊ぶことの多い私には、ArduinoからEthernetフレームが送信できていることが大変新鮮でした。Spoofing)にも触れられて、大変興味深い講義でした。午前8時30分から午後5時30分まで1日中演習を行っていたのですが、楽しくてあっという間でした。Piを舞台にFlagを集め、得点を競うというものでした。私は今回が初CTFでした。Piが舞台ということで、まず適当にポートスキャンした結果SSHとHTTPに加えて2つ怪しげにポートが空いていたので、そのあたりはWebあたりに強いチームメイトにお任せしました。Piの初期ユーザとパスワードは体が覚えていたのでSSH接続を試みた結果あっさりログイン出来てフラグがあったので驚きました。Piに保存されていたバイナリの解析を行いました。1つはどうやら引数の値からFlagの値を計算していたようで、解析すると連立方程式の解がFlagに対応することがわかりました。解の組み合わせをできるだけ多く試すスクリプトを書いて総当たり的にFlagを計算しました。出力されたそれらしい値を提出すると整数解の最小の組み合わせ(基本ベクトル)がそのままFlagを生成していたらしく、正攻法とは言えないかもしれませんが総じて2問分の得点だけチームに貢献できてよかったです。私がこれらのことをやっている間に、チームメイトが他の問題(Web系などなど)を攻めて得点につなげてくれていて、なんと私のグループは優勝できました!チームメイトに感謝感謝、と言いながら、ひとえにCTFと言っても様々な形(問題形式)があるのだなぁ、と思い、とても興味がわきました。機器を始めとした製品に対して脆弱性発見に挑戦していただきます。そこから検証コード作成を含めた脆弱性報告の仕方についても実践していただきます。ファジングを行ってその結果を観察しました。実際に脆弱性が発見された、といったことはなかったのですが、実際にツールがファジングに使っているデータが興味深いデータばかりでした。専門(4)オンラインゲームのプログラムなどによる自動プレイは、不正行為として禁止されているケースがほとんどです。不正行為自体はなくならず、近年では、自動化のみならずチートなどの行為も横行しており、対策に追われることも少なくありません。本講義では、オンラインWebゲームを運営する側とプレイする側に分かれて、運営側と攻撃側を体験します。講義で使用されたゲームについてはこちらに詳しく書かれています。講義は前半と後半に分けられ、私はプレイヤー側と運営側の両方を担当することができました。プレイヤー側では、自分がゲームをプレイしやすいようにするためのコントローラが完成直前で時間切れになったため悔しい思いをしました。サーバ側では、サーバのログを逐次見ながら、明らかに人為的なものではない(プログラムで実行されたような)挙動が発生した際に逐次対応できるよう努めました。セキュリティの脆弱性以外にも、攻撃者によっていかに攻撃を効率よくさせないか、といったようなことと関連があるのでは、と思いました。programming(ROP)で利用可能なコード断片(ROPガジェット)を探索するツールを自作・利用していきます。着目した講義で、ROPガジェットを見つけて構成するという講義でした。講義では、libcのバイナリに対してシェルを起動することを目的に、ROPガジェットをツールを用いて探し、構成しました。ここでは4つのlibcが用意され、次のことを行う、といった演習でした。1つのlibcに対してシェルを起動するよう、ROPガジェットを構成する×42つのlibcに対して1つのプログラムで両方ともシェルが起動できるようにROPガジェットを構成する3つのlibcに対して1つのプログラムで(以下略4つ(以下略キャンプが始まる前までは全く未知の分野で、理解できるか大変不安でした。講義が始まってひととおり説明を受け、実際にROPガジェットを探して組み合わせ始めると、途端に楽しくなって、1つROPが完成できたときには大変興奮しました。私はlibcに対してシェルを起動するプログラムを2つまで作ることができました。ほかの方の中には複数のlibcに対して同時に起動するものを作成できた方もいました。講義を受けるまで不安が多かったのですが、講義後にはとても気持ちよく、引き続き勉強したくなりました。この講義はスケジュールの都合上、他の講義より時間が短く、物足りなさも感じました。使ったアダプタで各人のPCからCANバスにアクセスし、流れているメッセージを受信し解析する方法を、LinuxとPythonの環境を使ったハンズオン形式で行う予定です。この講義では、CANのパケットを受信して、その内容をフォーマットに基づいて解析する、といったことを行いました。CANのデータフォーマットについても丁寧に解説いただき、スクリプトを組んで実際にデータが解析できて大変面白かったです。CANのデータフォーマットとその意味について説明があり、個人的には「なるほど...!!」と感動しました。専門(7)組込み/IoTシステムに搭載される組込みリアルタイムOSと通信ミドルウェアの仕組みについて、実機による演習を通して学んでいただきます。異なる、組込み/IoTシステムの世界を、ソフトウェアを中心に知ることができます。普段マイコンをOSなしの環境下でプログラムを組む私にとっては、組込み用リアルタイムOSはまるで別の世界でした。ふたを開けてみれば、形は違えどまるで通常のOSのようなスタイルでプログラムを組むことができて、大変便利だと感じました。一方で組み込み特有の事情に起因する違いもあって、新鮮でした。私のグループは「小規模企業におけるセキュリティ対策」について考察しました。発表まで(ほとんど前日)に調査、考察をする中で、他のグループのテーマとも深く関わりがあるように思えてきて、「もともとそのような意図からこのグループワークは始まったのでは・・・?」と思いながら資料を作成しました。実際に他のグループの発表を聞きながら自分のチームの発表を終えると、(冷静に考えれば容易にわかることかもしれないけれど)内容をうまく絞ることができていなかった、と反省しました。他のグループの発表を聞きながら、その発想はなかった、と思うことも多々あって、個人的によい刺激になったと思います。キャンプを終えてセキュリティ・キャンプの5日間は本当に濃く、(感覚的に)短いものでした。参加者の皆さん、チューター、講師の皆さんには大変感謝しております。本当にありがとうございました。夜でも外が明るかったので、明るいと寝付けない私にとってはなかなか辛かった。Capitan)OSXのHomebrewでインストールしたgnuplotでpdf出力ができなかったのでその解決策をメモ。gnuplotとするだけでターミナル上でgnuplotを動かすことができます。...が、これだけだとpdf出力ができないようです。terminalと実行することでわかります。解決策は、「pdf出力をサポートするようにインストールオプションを追加する」です。等でインストールオプションは調べられるそうです)したがって、一度gnuplotをアンインストールしてからオプションを追加して再インストールする必要があります。pdf出力をサポートするためのインストールオプションは"--pdf"とのことなので、以下のように実行することでpdf出力ができるようになりました。PiでIPアドレスを静的にする方法がWheezyとJessieで異なる(?)のでここに記します。これまでは/etc/network/interfacesに記載する方法をとっていました。(おそらくそのような記事が多数)Jessieから、/etc/dhcpcd.confに追記しなければならないようです。domain_name_servers=DNSサーバアドレス/etc/network/interfacesはデフォルトのままで、dhcpcd.confを編集するのみでIPアドレスを固定することができました。無線LANを用いる場合のwpa_supplicant.conf周りの設定はWheezyとJessie間で変更はない模様です。Jessieで静的IPTweet広告を非表示にするもっと読むコメントを書く2016-06-25スタート後の自分のためも兼ねていろいろ書いた方がいいと思って作ってみました。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。