プロジェクト

全般

プロフィール

ニュース

Open Source unConference 2016 Chiba を賑やかしに行きました

さんがほぼ9年前に追加

Open Source unConference 2016 Chiba を賑やかしに行きました!

Open Source unConference 2016 Chiba (2016/07/23 15:00〜)

飲食物が出ます!
ビールを飲みながらのLTは最高ですな~。

印象に残った面白そうな話

不正アクセスを検出して、iptablesにアクセス禁止を加えるというfail2banを参考に、に更にIPv6に対応したもの。イカス。

どんな話が繰り広げられているのか気になったw
車の話とか、女子トイレの話とか、あと、女子トイレの話とか

20160723_OSunC.jpg

katagaitai CTF勉強会#5 - 関東|med に参加してきました

さんがほぼ9年前に追加

5周年、おめでとうございます。今回も良い勉強会でございました。

katagaitai CTF勉強会 #5 - 関東|med : ATND

場所は安定の、人員の許容量が宇宙ヤバい秋葉原UDXで開催。広い。
途中、スピーカーへの音声インジェクション(混線とも言う)でpwnされるというハプニングがあって笑った。

trmrさんの部

スライド中でご紹介頂き、ありがとうございます~。

ハッシュ面白い~。
MD5をもう使うなって件は、単にハッシュ値が短くて、衝突しやすいから使うのやめようって話だと、ずっと思ってた。
実は総当りよりも遥かに少ない回数で衝突させることが出来るとは、ちょっと衝撃でした。
ツール(HashPump,FastColl,HashClash)も幾つか教えて頂いたので試してみようかと思っています。

暗号学の偉人伝は、実はかなり面白かった。
レトロハッカーズを思い出した。

bataさんの部

私が今一番知りたかったヒープの話があって、良かった。ありえん良さみが深かった。
たぶん、初めて参加した1年ぐらい前だと全然理解できなかったと思うんですが、今はお話が解るようになりました。
わ、私にも解かる、解かるぞ!(問題が解けるとは言っていない)

「全ての複雑なものは、単純なものの組み合わせで出来ている」

っていう私の好きな言葉があるんですが(誰が言ったか覚えていない)、今回まさにそれでした。ただ、、複雑過ぎて笑った。

個々の単純な部分まで分解して、説明して貰ったので、とても解りやすかったです。

発表したスライドは、後々slideshareで公開されるようなので、参加しなかった方も乞うご期待!!

ま、それが組み合わさって、解答に辿り着くまでの道筋は、なんというか、常軌を逸していたけれどw

ほんと、こんな問題よく作ったな。。。そしてよく解いたな。。。

ヒープについては、自分の勉強ノートに書けていないのですが、整理して書く良いきっかけになりました。

延長戦でのDWARFの話も大変興味深かったです。

20160716_katagaitaiCTF.jpg

頂きもの

ノートとペンを頂きました。ありがてぇ・・・ありがてぇ・・・

ノートはCamiApp対応で重宝しそう。
スマホで写してDropBoxへ転送。。捗る。

このペン実は、前回も前々回も頂いているんですが、隠れた高性能っぷりを発揮しておりまして、
普通の貰い物ボールペンは、途中でよくインク出なくなって終了したりするんですが、これはインク切れが無いんですよ!!
日々愛用させて頂いております。

20160716_katagaitaiCTF_NRIsecure.jpg

Trend Micro CTF 2016 (1コメント)

さんがほぼ9年前に追加

今年も
/attachments/download/106/20150715_aa.jpg

セキュリティ技術の競技大会「Trend Micro CTF 2016」を開催
~全世界の技術者が、IoTや制御システム関連のセキュリティ技術を競う~
http://www.trendmicro.co.jp/jp/about-us/press-releases/articles/20160701042341.html

Trend Micro CTF 2016
http://www.trendmicro.co.jp/jp/sp/ctf2016_jp/index.html

Trend Micro CTF 2016

しかしkatagaitai勉強会#6 - 関東|easyと被ってしまってるぅぅぅぅ。
うわぁああぁぁぁあああああああああああああああああ

katagaitai勉強会#6 - 関東|easy : ATND

シェル芸人のためのJupyter環境

さんがほぼ9年前に追加

Jupyter

シェル芸人のためのJupyter環境を構築しよう!!!11

スクリーンショット

screenshot1.png

Jupyterとは

スクリーンショットをご覧あれ。ブラウザでPython(Bashも)を実行出来る環境です。

  • Markdown形式のメモと一緒にWeb上で実行&保存できちゃうステキ機能
  • 書いた物は保存できて、いつでも再実行可。
  • スライドやhtmlにも変換できます。
  • GitHub Gistにエクスポートすれば、公開もできちゃう。

まさにPythonista(シェル芸人)のための環境ですねw

噂の買い切りVPSCloudAtCostに導入してみてもいいかもしれない。

Jupyter環境の構築

ググると幾つか出てきますが、minicondaを使用したインストール方法を以下にまとめます。

minicondaを利用する利点としては、こんな感じです。

  • 一般ユーザの環境に導入できる(システムに深く食い込まないので、アンインストールが簡単)
  • 既存のPython環境と別々に作ることができ、かつ、お互いに干渉しない環境が簡単に作れる
  • 容量がanacondaより小さく、必要最小限。

minicondaは、主にPythonの数値処理系のライブラリを加えたanacondaというものの最小のセットになります。

想定する環境

以下を想定しています

  • CentOS または RedHatLinux

実際にセットアップした環境は以下です。

CentOS Linux release 7.2.1511 (Core) 

minicondaのインストール

以下からセットアップ用のファイルをダウンロードします。
python3用のセットアップファイルをダウンロードしてください。

miniconda
http://conda.pydata.org/miniconda.html

$ wget https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh

余談ですけど、このシェルスクリプト、バイナリファイルと悪魔合体する黒魔術を使っているので、catしてみたりすると大変な事になりますw

実行。
途中、対話形式で入力を求められますが、以下のよう入力してください。

$ bash Miniconda3-latest-Linux-x86_64.sh
[Enter]
yes
[Enter] # or 任意のインストール先を入力
no      # システムに標準で入っているPython環境と使い分けをしたいため。.bashrcに追加されてもいい人は yes にしておく。

インストール時にnoを選択して .bashrc に追加しなかったので、以下の通り、任意に環境変数をセットするシェルスクリプトを作成しておきます。
これによって、こんな環境の切り替えができます。

  • 通常は、システムに入っているPythonが使われる。
  • このシェルスクリプトを実行して環境変数を取り込んだときだけ、miniconda環境が使われる。

環境変数(PATH)設定用のシェルスクリプトを作る。

$ vi setenv.sh
#!/bin/bash

PATH=[minicondaのインストールディレクトリ]/miniconda3/bin:$PATH
export PATH

ドット実行する。
環境変数PATHの先頭に[minicondaのインストールディレクトリ]/bin が含まれていることを確認する。

$ . setenv.sh
$ env |grep PATH
PATH=[minicondaのインストールディレクトリ]/miniconda3/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin

Jupyterのインストール(minicondaインストール先にインストールされる)

$ conda install jupyter

Jupyter設定ファイルの生成。

$ jupyter notebook --generate-config

パスワードの作成(結果をメモしておく)

以下はパスワードを hoge にしているけど、適宜変更してね。

$ python
Python 3.5.1 |Continuum Analytics, Inc.| (default, Dec  7 2015, 11:16:01) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from notebook.auth import passwd
>>> passwd()
Enter password: hoge
Verify password: hoge
'sha1:86a104de86a2:d3f296d042d0be7c38df963b01670e51dd2ab081'
>>> quit()

Jupyter設定ファイルの編集

  1. ローカルホストからしか接続を認めない→どこからでもOKに修正
  2. Jupyterで書いたファイルの保存先を指定
  3. 認証パスワードを設定(上記Pythonのpasswd()の事項結果をコピペ)
  4. 接続先ポート番号を指定(デフォルトは8888)
$ cd ~/.jupyter
$ vi jupyter_notebook_config.py

- # c.NotebookApp.ip = 'localhost'
+ c.NotebookApp.ip = '*'

- # c.NotebookApp.notebook_dir = u''
+ c.NotebookApp.notebook_dir = u'ファイルを保存する任意のディレクトリ'

- # c.NotebookApp.password = u''
+ c.NotebookApp.password = u'sha1:86a104de86a2:d3f296d042d0be7c38df963b01670e51dd2ab081'

- # c.NotebookApp.port = 8888
+ c.NotebookApp.port = 8883

httpsて通信するための設定

  • Let's Encrypt サーバー証明書を取得しましょう。
  • 詳細は、ServersManの Let's Encrypt サーバー証明書の取得と自動更新設定 を参照のこと。
  • 証明書が準備できたら、Jupyter設定ファイルの編集します。
  1. サーバ証明書の所在を設定
  2. 秘密鍵の所在を設定
$ cd ~/.jupyter
$ vi jupyter_notebook_config.py

- # c.NotebookApp.certfile = u''
+ c.NotebookApp.certfile = u'/etc/letsencrypt/live/<ドメイン名>/cert.pem'

- # c.NotebookApp.keyfile = u''
+ c.NotebookApp.keyfile = u'/etc/letsencrypt/live/<ドメイン名>/privkey.pem'

Jupyterに Bash のJupyterカーネルを導入する

Jupyterカーネルと呼ばれる以下を追加インストールすることで、
Bash版Jupyterになるのでありえん良さみが深い(Python3環境が前提、Python2だどダメ)。

A bash kernel for IPython
https://github.com/takluyver/bash_kernel

$ . setenv.sh
$ pip install bash_kernel
$ python -m bash_kernel.install

実は、他のいろんな言語も用意されているので、大半の言語はJupyter上で動かす事ができる。

参考:IPython kernels for other languages

Jupyterの起動

起動

$ jupyter-notebook

後はブラウザで、https://example.com:8883 にアクセスするべし。

minicondaでPython2環境も作って共存させる場合

同じ方法でpython2環境も起動できる。
ただし、python3とpython2のJupyter環境を同時に起動するには、
Jupyter設定ファイルのポート番号を別々にする必要がある

$ vi jupyter_notebook_config_for_python2.py

- # c.NotebookApp.port = 8888
+ c.NotebookApp.port = 8882 # python3の設定値とは別にする

起動は、作った設定ファイルを直接指定して起動できる。

$ jupyter-notebook --config=設定ファイルのパス

使い方

使い方はググると沢山出てくるので、そちらに譲ります。
(当ページ下部のMemoの所にもリンクを入れておきました)

シェル芸人のためのJupyterの使い方を説明します。

シェル芸人のためのJupyter使い方

まず、デフォルトのPythonカーネルでもシェル芸はできます。
行頭に%%bashと入力すればシェルを実行できます。

%%bash
date;echo hoge;date

screenshot2.png

ただ、カーネルを Bash に切り替えることで、この%%bashが不要になります。
あとは……わかるね?

date;echo hoge;date

screenshot3.png

Memo

Jupyter関連で役立ちそうなリンクのメモ。

Jupyter (iPython) Notebookを使って技術ノート環境を構築する方法 - MyEnigma
http://myenigma.hatenablog.com/entry/2016/02/20/183423

Jupyter (iPython) Notebookを使って技術ノート環境を構築する方法 - MyEnigma

Jupyter (iPython) Notebookを使ってプレゼンテーション資料を作る方法 - MyEnigma
http://myenigma.hatenablog.com/entry/2016/05/22/160209

Jupyter (iPython) Notebookを使ってプレゼンテーション資料を作る方法 - MyEnigma


Qiita

Jupyter事始め - Qiita
http://qiita.com/taka4sato/items/2c3397ff34c440044978

extensionを追加してもっと快適なJupyter環境を構築する - Qiita
http://qiita.com/sasaki77/items/30a19d2be7d94116b237

Condaで作ってる仮想環境の切り替えをJupyter上で簡単に行う方法 - Qiita
http://qiita.com/yoppe/items/38005f415a5b8b884c7d

Jupyter Notebookでブログ書きたい - Qiita
http://qiita.com/patraqushe/items/49a990cbdfb51afed620

Jupyter notebook で HTML も自動作成 - Qiita
http://qiita.com/junkoda/items/011d44dcc1c8bd0a936a

Jupyterでコンテナーを入れ子の枠で表現(図式化)、とそれを作る過程で調べたこと - Qiita
http://qiita.com/argius/items/17710321c8225bfb7417

Jupyterで好きなHTMLを埋め込む - Qiita
http://qiita.com/xeno1991/items/65b7da476d6f89d06388

Qiitaの記事とJupyter notebokとの相互変換 - Qiita
http://qiita.com/Tsutomu-KKE@github/items/168400d2e3ea44a70022

iPython でスライド作り - Qiita
http://qiita.com/sosuke/items/e42b5b81878e361249b6

junpyter notebookをCUIで実行&保存 - Qiita
http://qiita.com/nzw0301/items/83814189bd93224b7c51

nbviewerでスライド表示もできるようになった!【Jupyter】 - Qiita
http://qiita.com/ssh0/items/de6cc6aacd004a2e57dd

データサイエンティストに向けたコーディング環境Jupyter Notebookの勧め - Qiita
http://qiita.com/y__sama/items/17aedf0c05187edd61c3


nbviewer - A simple way to share Jupyter Notebooks
http://nbviewer.jupyter.org/

once upon a time, - JupyterからSpark clusterを操作できるlivy + sparkmagicを試してみた
http://chezou.hatenablog.com/entry/2016/07/12/115000

Jupyter Notebook の Tips をまとめてみた
https://adtech.cyberagent.io/techblog/archives/2317

技術書典に行ってキマシタワー

さんがほぼ9年前に追加

技術書典に行ってきました。

技術書典:技術書オンリーイベント

技術書の同人誌販売な感じのイベント。

小生、コミケとかそういうの行ったことがないのだけれど、初めてそれっぽいイベントに行ってきました。早めに行ったから早めに入れたんだけど、めっちゃ並んでた。

20160625_techbookfest1.jpg

初めて薄い本を買いました

めっちゃ人いる!これがコミケか…

以下を買いました。読むのが楽しみ。

O'Creilly - ソフトウェア技術書同人サークル supported by NCC

  • KIJAK'SAY(きじゃくせい)

セキュリティ関係の本(うっすら変態仮・・・げふんげふん)

20160625_techbookfest2.jpg

秋葉原は、ありえん肉みが深い。

久しぶりに秋葉原に来たら、肉度がかなり上がっている。

とんかつ - 商店 - ケバブ - 商店 - ラーメン - 商店

という感じである。異常事態である。何が起きたんだ。その中で会場にほど近い肉汁麺ススムに行ってきました。

味が濃いのだけれど癖になる。これでレベル2(レベル4まである)ありえん肉みが深い。完飲。

20160625_niku.jpg

「シチズンフォー スノーデンの暴露」を見てきました (1コメント)

さんがほぼ9年前に追加

シチズンフォー スノーデンの暴露というエドワード・スノーデンを題材にしたドキュメンタリーを見てきました!

映画「シチズンフォー スノーデンの暴露」

ここの記事を事前に読んでおくと更に楽しめます。

THE ZERO/ONE - 正義の告発者か買収されたスパイか スノーデンの素顔に迫るドキュメンタリー映画『シチズンフォー スノーデンの暴露』

正義の告発者か買収されたスパイか スノーデンの素顔に迫るドキュメンタリー映画『シチズンフォー スノーデンの暴露』
https://the01.jp/p0002479/

THE ZERO/ONE - ハッカーの系譜 エドワード・スノーデン

米国で繰り返される「諜報」と「内部告発」の歴史(1/6)
https://the01.jp/p0001924/

米諜報機関が生んだハッカーの葛藤(2/6)
https://the01.jp/p0001950/

闇に葬られないための入念な「告発準備」(3/6)
https://the01.jp/p0001968/

世界に衝撃を与えた米国の盗聴プログラム「プリズム」(4/6)
https://the01.jp/p0001998/

「世紀の告発者」への第一歩を踏み出す(5/6)
https://the01.jp/p0002027/

香港からの脱出、そしてロシアへ(6/6)
https://the01.jp/p0002038/

THE ZERO/ONE - ハッカーの系譜 ジュリアン・アサンジ

ウィキリークス「反骨」の原風景(1/6)
https://the01.jp/p0002395/

少年ハッカー「メンダックス」の冒険(2/6)
https://the01.jp/p0002414/

サイファーパンクスとの出会い(3/6)
https://the01.jp/p0002449/

少年ハッカーから国家と戦うハクティビストに(4/6)
https://the01.jp/p0002464/

※連載中(2016.6.18現在)

いちエンジニアとしての感想

当初より、エドワード・スノーデンさんのリークした情報の真偽が疑われたりしています。
また、現在に至るまで名だたるIT関連企業は、関与した事実を認めていません。

映画はドキュメンタリーでしたので、エドワード・スノーデンさん自身が、ものすごく、ものすご~く、情報の取り扱いに気を使っていたのを生で見ることが出来ました。(VOIP電話のコード抜いたり、スマホを冷蔵庫に入れたり、全てPGPで暗号化したり)

さてさて、信じられないような情報が数々がリークされた訳ですが、いちエンジニアとして、その真偽について感想を述べたいと思います。

まず、

  • 技術的に矛盾した話は無かった。
  • ちょっと、大げさに情報漏えいを恐れていたようにも感じたが、(VOIP電話のコード抜いたり、スマホを冷蔵庫に入れたり)、技術的には盗聴が可能という側面と、自分の命がかかってるので解る。
  • 逆にそこまで気にしないといけないNSA怖い。

国家規模の盗聴に関して言うと、

  • 実現するには、国家規模で、ものすごいリソースの用意が必要。(特にディスクとメモリが。どの位必要なのか想像もできない。)
  • さらに、IT関連の複数の大企業の協力が必要(顧客のプライバシーを守ると声高に宣言している企業の協力が)。
  • さらに、国家間で秘密裏に協定を結んだり、もしくは勝手に他国へもネットワークを広げることが必要。

という、普通なら実現不可能に思えました。
特に、「IT関連の複数の大企業の協力が必要」というあたりは、CEOだけが墓場まで持って行けばよいという訳でもなくて、そんな工事・作業するのにも複数人の関係者が必要になります。彼らの口を全て塞ぐのは難しいんじゃないんですかね。まさか
でも、でも、もしかしたら国が本気出せばできるのかもしれません。。

2016.6.21追記
と、思ったんだけど次のコンボで特に疑われずにNSAは動けるね。コメント欄に書いたTEDの動画見て思った。
米国には裁判所の命令があれば、合法的に盗聴できる。→それを理由に盗聴する仕組みを各IT企業に作る。→(本当は裁判所の命令がないと盗聴できないけど)後は、勝手に盗聴する。

盗聴されると、どうなるのかしら

そんな訳で、国家規模で盗聴されていると仮定すると何がどうなるか想像してみます。

まず日常的に使っている検索エンジンやメール、ネットショッピングの内容が全て筒抜けになります。
普通に生活している分には、データ収集されても、あまり影響がないような気もしますが、技術的には改竄も可能なので、

  • 「検索語A」で検索したのに「検索語B」の結果が返ってきたり
  • メールに書いてある待合せ場所と時間を書き換えられたり
  • クレジットカードの番号を盗まれて勝手に買い物される

そんなリスクまで考えられます。国がやろうと思ったら、ですけど。

「自分ネットする時、絶対HTTPS(SSL/TLS)しか使わないんで大丈夫っすよ」
と思われる方もいるかもしれませんが、HTTPSは、みなさんのPCとサービスを提供する企業の入り口までを暗号化しているのであって、それ以降は筒抜けになります。ここから抜かれるとどうしようもありません。

                              ┏━━━━━━━━━━ IT企業のデータセンタ ━━━━━━━━━┓
                              ┃                                                            ┃
自分のPC(ブラウザ) <---------->[HTTPSをHTTPに複合する機能]<---------->[ロードバランサ等]<---┃
                       HTTPS  ┃                              HTTP                          ┃
                   暗号化して┗━━━━━━━━━━━━━━━┯━━━━━━━━━━━━━━┛
                    安全な区間                                │
                                                   この区間で盗聴されると平文
                                      (普通の常識だとデータセンターの中なので、盗聴は無理)

個人でできる情報の秘匿 - PGPを使う

こんな情報筒抜けな世の中だとしても、誰にも内緒で情報を伝える手段は存在します。
エドワード・スノーデンさんも頻繁に使っておりましたが、公開鍵暗号方式で暗号化して送ればいいんですね。

映画ではPGPを使っておりました。
日常的に使うには、ちょっと面倒なんですが、届いた相手のPCでしか複合できない仕組みなので確実です。

余談ですが、PGPを使う際には鍵長は最大(恐らく2048bit)を設定しましょう。短い鍵長だと、計算能力が高いコンピュータで割り当てられてしまうかもしれません。ちなみに鍵破りコンテストが随時開催中で、640bitの鍵長までは破られています。

参考:MathWorld Headline News RSA-640 Factored

スノーデンさんの件に関しては、真偽についても賛否についても、ご意見ある方いらっしゃると思いますが、いちエンジニアとして技術的に大変興味深く拝見させて頂いた映画でした。

なんか書いてて怖くなってきた。
あれ、誰か来たみたい。

コメント

参考情報追加。映画を見た後に見るとより面白い。

TED - エドワード・スノーデン: インターネットを取り戻すために
http://ted.com/talks/edward_snowden_here_s_how_we_take_back_the_internet.html

TED - リチャード・レジェット: エドワード・スノーデン氏のTEDにおけるトークに対するNSA(米国国家安全保障局) の反論
http://ted.com/talks/richard_ledgett_the_nsa_responds_to_edward_snowden_s_ted_talk.html

ニコナレで公開されているスライドをpdfでダウンロードするコマンド

さんがほぼ9年前に追加

niconare-dl

niconareは、2019年8月15日(木)をもってサービス終了とのことです。

niconareで公開されているスライドをpdfでダウンロードするコマンド

2019.2.18追記 ニコナレの仕様が変わちゃったので現状は動きません

Installation

ファイルダウンロードして実行権限をつけるだけ

$ wget https://raintrees.net/attachments/download/201/niconare-dl
$ chmod u+x ./niconare-dl

動作環境

x86_64のLinuxで動作すると思われます。

以下で、動作確認しました。

  • CentOS Linux release 7.2.1511 x86_64
  • Kali GNU/Linux 2.0 (sana) x86_64

Debian系だと、若干表示がおかしくなることもあるみたいだけど(゚ε゚)キニシナイ!!

Usage

$ ./niconare-dl [URL]

$ niconare-dl http://niconare.nicovideo.jp/watch/kn1275
initializing..
downloading.. 59 slides
converting.. 恐怖!シェルショッカーのPOSIX原理主義シェルスクリプト.pdf
complete
$ls
恐怖!シェルショッカーのPOSIX原理主義シェルスクリプト.pdf

URLは'(シングルコーテーション)で囲んでおいた方が無難。

URLの中に & が入っているとシェルがバックグラウンド実行の記号と解釈しちゃうので。。

Specification

一時作業領域として、コマンド実行中にカレントディレクトリに以下のディレクトリが作成されます。
コマンド実行後には、削除されます。

niconare-dl_temp_[プロセスID]

もし、なんらかの理由でこのディレクトリが残っていたら、不要ですので削除してかまいません。

注意事項

スライド形式はダウンロードできるんですが、動画形式(?)には対応していません。
許してつかぁさい。堪忍してつかぁさい。。

Background

何故作ったか

最近なんかSlide Share以外に、Speacker Deckニコナレを使う人が出てきたみたい。(Speaker Deckは標準でPDFダウンロード機能がある)

Slide ShareSpeacker Deckは、ダウンロードして、電車の中で読むというのをしておりまして。
ニコナレも・・・!と、思って気がついたら作ってた。

動的リンクの実行ファイルを静的リンクに変換する

さんがほぼ9年前に追加

statifierというのを使ってみました。

Statifier

追記(2025/5)
今はsoldといういい感じのがあります

経緯

とあるコマンドをインストールしようと思った・・・・が・・・・・ 駄目っ・・・・・!
パッケージの依存関係がすごい。つまり、1つコマンドを導入するのに、入れたくないパッケージを山のように入れなければならない。。

そのコマンド1つだけ実行したいだけなのに・・・

そこで思いつく悪魔の発想・・・っ!

fig2.png
fig1.png

1バイナリで動くようにすれば、他の環境に楽に持っていける。理論上は出来るはず・・・と思い、調べたら出てきた。

statifierというのを使えば可能であることがわかった。

ELF STATIFIER MAIN PAGE

メンテナンスはあまり活発ではないようだが、x86_64にも対応してくれているっぽい。

その他の案として、参照している動的リンクライブラリを全部洗い出してコピーし、LD_PRELOAD環境変数に突っ込んだ上で実行すればいけるかなぁ。とか、思ったんだけど、試してはいない。

概要

結局、なにがしたいかと言うと、

$ cat test.c 
#include <stdio.h>

int main(){
  printf("Helloworld");
  return 0;
}
$ gcc test.c 
$ ldd a.out 
        linux-vdso.so.1 =>  (0x00007fffc62d0000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f886214a000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f8862517000)

この単純なプログラムですら、3つの動的リンクライブラリを必要としている事がわかる。
このライブラリがシステムに存在しないと、プログラムは動かない。
だったら・・・プログラム(a.out)の中に、この3つの動的リンクライブラリを取り込んだらいいじゃない。
という発想。

Install

まず、自分はこのソフトのコンパイルのため、コンパイル用の仮想環境を用意した。
statifierを導入するために、依存関係となっている複数パッケージを導入する・・・のは本末転倒である。
コンパイル済みのものだけを目的の環境にコピーしてやればよいではないか。

という訳で、ここから最新版のtar.gzをダウンロードする。

自分が実施した時は、statifier-1.7.4.tar.gz でした。

適当なところに展開しておく。

$ tar xvfz statifier-1.7.4.tar.gz

コンパイル時に必要となるパッケージをインストール。

# yum install glibc.i686 glibc-devel.i686 libgcc.x86_64 libgcc.i686 

makeする。

$ cd xvfz statifier-1.7.4
$ bash ./configure
$ make

というのが、めんどうな方のために自分がコンパイルしたものをここに置いておく。

statifier-1.7.4_for_x86_64.tar.gz

実行環境について

さっそく動作確認してみる。
dateコマンドを静的リンクにしてみよう。

$ ldd /bin/date 
        linux-vdso.so.1 =>  (0x00007fff3432f000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f61fcf4f000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f61fd31c000)
$ cd statifier-1.7.4
$ setarch `uname -m` -R src/statifier.sh /bin/date /tmp/date2

これでstaticなdateコマンドが出来たはず。

$ setarch `uname -m` -R /tmp/date2
2016年  6月  5日 日曜日 17:30:56 JST
$ ldd /tmp/date2
        動的実行ファイルではありません

うん、たぶんうまく動いてるんだと思われる。

超注意:ASLRの怪

なんか、おまじないのようなコマンドがくっついているのが、おわかり頂けただろうか・・・

$ setarch `uname -m` -R

実は、これ、LinuxのASLRというセキュリティ機能を一時的に無効にするコマンドになります。
ASLRについては、ググるか、CTF_Pwnをみてね。
なんか、いろいろやってみたけど、動かなくてね~。

どうやら、「静的リンクの実行体に変換する時」と、「実際に動作させる時」にメモリアドレスが同じになってないといけないっぽい。

なので、必ず「setarch uname -m -R」を頭につけて変換&実行しておくれ。

想定される使い方

よっしゃー。これで、1バイナリになって、どの環境でも動くぞイヤッッホォォォオオォオウ!

と、ならないのが世の定め。。

ちょっとLinuxディストリビューションの違うLinuxに持ち込んでみたが動かない。。
まぁ全部試した訳ではないのだけれど、
同じディストリビューションだと動いているっぽい。

たぶん、kernelのバージョンが違ってたりすると、取り込んだlibcでそれを吸収できないとか、そんな感じになっている気がする。
調べてないけど。

そう考えると1バイナリになるGo言語って結構考えられてますね。ファイルサイズが大きくなるだろうから、そこらへんトレードオフなんだろうけど。

なので、自分は同じLinuxディストリビューションで2環境用意して運用している。

  • VMでコンパイル用環境を作る(足りない物は、なんでもかんでもyum install。使い捨て)
  • 本番環境。できるだけパッケージを入れない。

補足

statifier には、こんな記述が

Recent Linux kernels introduced VDSO (Virtual Dynamic Shared Object) and stack randomization. Those things, while valuable features, don't play well with Statifier.

意訳:ASLRとVDSOを使うバイナリは上手く動かないぜ

この statifier を作った方達は、Ermine というソフトを販売しております。

Ermine works in a fashion similar to Statifier, creating self-contained executables from dynamically-linked >applications. But Ermine-packed applications are not snapshots: instead they can be thought of as small virtual machines.
And because of this an Ermine-packed application does not suffer from the problems created by VDSO/stack randomization

意訳:Ermineなら問題ないんだぜ

Ermine
http://www.magicermine.com/

15日トライアルもできるらしい。

参考

bkブログ - statifier で動的リンクの実行ファイルを擬似的に静的リンクにする
http://0xcc.net/blog/archives/000089.html

ELF Statifierを使って実行形式ファイルをシステム間で移動する
https://osdn.jp/magazine/08/12/02/012255

WAFを知らない人に説明する試み

さんが約9年前に追加

仕事で使うかもしれんのでまとめてみた。

WAFとIPSとFireWallとウィルス対策ソフトと何が違うの?
とか、確かに説明しづらい気がする。WAF知らない人に対しても、できるだけ簡潔に説明したい。

詳細は、Security#WAF参照。

WAF~><

Redmineにブログパーツを貼るには

さんが約9年前に追加

Redmineプラグインを作った。
Redmineにブログパーツを貼るには、このプラグインの機能を使えば可能。
可能というか、HTMLとJavaScriptで出来ることなら、なんでもできてしまう。

Redmine RawHtml plugin

RawHtml plugin開発

概要

通常のRedmine(RubyOnRails)は、デフォルトで許可していないタグやスクリプトを表示・実行することができません。
これはセキュリティ上の仕様であり、正しい、あるべき姿です。

ただ、ただどうしても、貼り付けたいブログパーツとか、実行させたいJavaScriptとかがある場合があります。
それを可能にするWikiマクロになります。

使い方

{{rawhtml(ここにhtmlタグ等を書く)}}

{{rawhtml(<div style="color:#ff0000">あああ</div>)}}

あああ

実行例

SlideShareの貼り付け

PHOTOPRESSOの貼り付け

ブログカードの貼り付け(はてなブログ記事紹介ジェネレータを利用)

オシャレ定量化コマンドを作ってオシャレ評価してみた - A painter and a black catオシャレ定量化コマンドを作ってオシャレ評価してみた - A painter and a black cat

ブログカードの貼り付け(Embed Code Generatorを利用)

オシャレ定量化コマンドを作ってオシャレ評価してみた - A painter and a black cat

ダウンロード

このページに添付してあるやつをダウンロードします。

redmine-rawhtml-0.9.0.tar.gz

セットアップ

DBは使ってないので、rakeとかは必要ありません。
ダウンロードファイル解凍後、pluginsフォルダへ。


# mv -i ./rawhtml /opt/alminium/plugins

お使いの環境に合わせて、ファイルの所有者を変更してください。

# cd /opt/alminium/plugins

# chown -R apache:apache rawhtml

注意事項

利用者のセキュリティに対する考慮について

このプラグインは 全てのタグ、全てのスクリプトを許容 します。
そのため、Redmineの登録ユーザは、 XSSCSRF 等の攻撃を容易に仕込む事が出来ます。

まぁ…かなり気の知れた仲間内で使うとか、私みたいに自分用Redmineとして使ってる人向けだと思ってください。

特定のユーザだけ許可するとか、そんな機能を加えればいいんだろうけど。

混在コンテンツのブロックについて

HTTPとHTTPSが入り交ざってコンテンツを配信していることを、混在コンテンツと言います。
最近のほとんどのWebブラウザは混在アクティブコンテンツに対しては自動でブロックします。
これはWebブラウザのセキュリティを考慮した仕様です。

以下の条件で、表示されたり、表示されなかったりします。

ブログパーツがhttp ブログパーツがhttps
表示元のサイトがhttp ○表示できる ○表示できる
表示元のサイトがhttps ×表示できない ○表示できる

これはこのプラグインに限った話ではなく、ブログパーツ一般のお話になります。
うまく表示されないブログパーツについては、混在コンテンツになっていないか確認するのがよいでしょう。

ちなみにニコニコ動画のブログパーツがhttpのみで、このサイトをhttpsでアクセスしていると、うまく表示されないんや。。

(91-100/155)

他の形式にエクスポート: Atom