2016-01-01から1年間の記事一覧
http://pwnable.kr/play.phpのuafがc++で書かれていたので読む必要が有ったので今後のためにもメモ程度に覚書を。今回はgdbのdisasとかobjdumpでアセンブリを読む時にnewはどのように呼んでいるるのかとかのめもです。 読んでいるバイナリのタイプはLinuxのE…
Kia Ora! この記事はプロ生ちゃん Advent Calendar 2016の16日目の記事です。 2015年はbash-completionでコマンド補完するときにプロ生ちゃんに何か言ってもらう - φ(・・*)ゞ ウーン カーネルとか弄ったりのメモなんて記事を書きました。2014年はプロ生ちゃん …
overthewireのbehemothのレベル6をクリアできたのでメモしときます。 この問題は脆弱性を突くタイプではなくて、特定の条件を満たすとshellが起動してクリアとなる問題でした。 これは実行するプログラムは/behemoth/behemoth6で、内部的には/behemoth/behem…
最近遊んでいるOverTheWireのBehemothのレベル4がシンボリックリンク攻撃だったのでその攻略めもです。 behemothの問題はソースコードは公開されてないので見れるのはバイナリだけです。で、gdbでdisas mainしたときの表示がこちら。 Dump of assembler code…
この記事はLinux Advent Calendar 2016の1日目の記事です。 テストする時にstubって便利ですよね。最近はnodejsで仕事のコードを書いているのでsinon便利だなとか思ってます。じゃあ、Linuxカーネルでもstub作れたら便利だよねという思うわけです。そうする…
最近CTFとか興味出てきたので色々と遊んでます。 今回はOverTheWire: Narniaのレベル7の問題(narnia7.c)を元にformat string attackのメモです。 narnia7の脆弱性のある関数はこれです。formatはmain関数においてはargv[1]で参照されていたもので、ユーザー…
たとえば、debugfsのディレクトリとファイルをプロセス毎に作って、ファイルの中身はプロセスごとに変えたいってことをしたい場合にどうするかというメモです。 foobarという機能がdebugfsのルートディレクトリにディレクトリを作成して、piyoというプロセス…
現在時刻取得のところmomentを使ってるけど、テスト書くときは固定値になって欲しいよねというところのめも。 momentを使っているクラスがこんなんだとして、 'use strict'; const moment = require('moment'); module.exports = class Foo { static get uni…
カーネルモジュールがロードされるアドレスって範囲決まってたはずだけど、自分で言っといてホントそうだったけ?とか思ったので確認。 @RKX1209 たしかmodule mapping spaceだと思った… https://t.co/4rH8h4G3rS— int $0x03 (@masami256) 2016年10月4日 調…
この記事はLinuxカーネルもくもく会 #24 - connpassで書いてます。今日は前に追加されたcgroupsのpid管理のコードを読んでみます。 ファイルはcgroup_pids.cです。Linux 4.7のコードを対象にします。 最初にデータ構造です。pidの場合はpids_cgroup構造体が…
bpf_probe_read()は3番目の引数を安全に読み出すためのものという認識で間違ってないとは思うけど。 linuxカーネルのsamples/bpf/bpf_helpers.hを見ると引数名はunsafe_ptrとかなってるし。strpcyとかだとinvalid opcode的なエラーになったので、この辺を使…
たまには古いカーネルでも読んでみましょう的なところで、Linux 2.0.40の頃はkmalloc()はどんな実装だったのかというところでも見てみましょう。最近のkmalloc()の実装は使用しているディストーションが採用しているスラブアローケータの__kmalloc()の実装を…
kernelnewbies.orgのLinux Changesを見てて良さげだなと思った「perf trace calls stack」のめもを。 基本的な使い方は説明が書かれているので、 perfでread、open、closeシステムコールを指定する場合。 masami@saga:~/tmp$ sudo perf trace -e read,open,c…
Linux 4.7からライブパッチ用のカーネルモジュールをロードする時にELFのセクションをチェックするようになりました。 このチェックが入ったこととで、今までのモジュールを再コンパイルするだけだと以下のようなエラーになってロードに失敗します。 [ 153.8…
rpmパッケージとかは通常のパッケージとデバッグ用のパッケージを分けて、debugしたいときはデバッグ情報付きのパッケージをインストールしますよね。あれがどんな感じで動いているのか確認したのでメモです。 使っている機能としては、gdbのデバッグ情報の…
2016年7月13日〜15日で行われたLinuxCon Japan 2016のセッションでカーネルハックの一環でカーネルのlivepatchの機能を使って、FreeBSDのバイナリをLinuxで動かすってセッションに参加して、そういう使い方もありだなと思ったのでちょっと試してみました。ア…
2時間位ハマったのでメモしときましょう φ(..)メモメモ KVMでCentOS7の仮想環境を作って、そこにdocker-machine create -d generic ~とやっていたんですが、sshでエラーコード127が返ってきていて、何がおきてるのかさっぱりわからずでハマりました。 こんな…
CentOS7でyumアップデートした後にdocker daemonが「devmapper: Unknown option dm.no_warn_on_loop_devices」というエラーで起動してなかったのでめも。 level=error msg="[graphdriver] prior storage driver \"devicemapper\" failed: devmapper: Unknown…
Linuxカーネルのコードを読んでて、なるほど〜と思うことはよくあるけど、その中でも特に今までの考え方をぶち壊してくれたのはなんだっけと思ったところ、やっぱりリスト構造かなと言うところ。 c言語でリスト構造を作る場合、一般的な教科書方式だと↓のよ…
詳解Linuxカーネル読書会 - 詳解Linuxカーネル読書会 | Doorkeeperのもくもく結果。今日はページキャッシュの処理を調べました。 参考資料はUnderstanding Linux Kernelですが、長いので赤本と呼びます。 kernelは4.6を参照 buffer_head構造体の初期化。 buf…
Dockerコンテナ内で使うディストリビューションはAlpine Linuxがマイブームですm( )m Dockerfileはこんな感じ。 FROM alpine:3.3 RUN apk update && \ apk add xvfb dbus firefox imagemagick ruby libffi && \ apk add --virtual=build-deps gcc make libc-…
systemdは~/.config/systemd/userにserviceファイルを置くことで、そのユーザー用のinit時の処理を動かすことができるんですね。基本的に使い方は通常と同じで、唯一違うのは--userをパラメータとして使用すること。詳細はArch Wikiを見ましょう。 このよう…
free(1)は/proc/meminfoを読みに行くので、Linuxカーネルでどのような変数を見せているのかを調べてみます。カーネルのバージョンは4.5です。あ、swapのほうは今回は見ません。 最初に見るのはfs/proc/meminfo.cで、このファイルが/proc/meminfoに対する操作…
先日参加した自作OSもくもく会で「Linuxカーネルのコマンドラインはブートローダーからどう渡されるのか?」のような話が聞こえたので、調べようと思い調べてみました。確認はLinux kernel v4.5とsystemd-bootの2016/05/02 23:00 JSTのコードです。 uefiじゃ…
systemptapでプロセスが所属する各pid名前空間におけるpid番号を取得する方法のめも。 プロセスのPIDは普通に見れますが、そこで見えているPIDというのは自身が所属しているPID名前空間においてのものです。なので、あるプロセスがunshareなりでpid名前空間…
pid numberからtask_structの取得のめも pid番号から直接task_structは取得できないので、pid構造体の取得 -> task_struct構造体の取得という流れになる。 pid名前空間を気しなくて良い場合は、find_get_pid()でpid構造体を取得し、pid_task()でtask_struct…
Ansibleのplaybookを書いていて、ファイルをダウンロードする前にログインが必要な場合にどうすればよいのかを調べたのでめも。 使用してるAnsibleのバージョンは2系です。 curlで例えると、--userでIDとパスワードを↓のように渡すのをansibleでどうやるかっ…
グローバルなnsproxyに設定するNet Namespaceの変数のinit_nsめも これはコンパイル時にはリストしか初期化していないので、その他のデータはカーネルの起動時に初期化してます。 35 struct net init_net = { 36 .dev_base_head = LIST_HEAD_INIT(init_net.d…
Linuxのnet namespaceにpernet_listというpernet_operation構造体のリストがあって、これがどのように設定されてるのかのめもです。 読んでるカーネルのバージョンは4.1です。 pernet_listを使ってるところは以前書いたこちらの記事にあります。 kernhack.ha…
プロセスが終了するときにもpid namespaceが関係するので、その辺りのめもです。 流れとしてはこんな感じです。 do_exit()@kernel/exit.c -> exit_notify@kernel/exit.c -> forget_original_parent()@kernel/exit.c -> find_child_reaper()@kernel/exit.c ->…