/var/log/msy.study

言語化の練習

The Art, Science, and Engineering of Fuzzing:A Surveyのまとめ

scrapboxにてFuzzingのサーベイ*1をまとめました。

scrapbox.io

Link: Fuzzing が該当する内容です。

分野に対する基礎知識が多少ついたので、読む価値はあったと思います。

あくまで自分用のメモなので、詳細が気になった方は原文を読むことを強くお勧めします。

*1:VALENTIN J.M. MANÈS et al. The Art, Science, and Engineering of Fuzzing- A Survey

Fuzzing: a survey の自分用メモ

Fuzzing: a survey

link: https://www.researchgate.net/publication/325577316_Fuzzing_a_survey

Fuzzingのサーベイ紙を読んだので、自分用にまとめたメモを公開しておきます。

1. background

1.1 static analysis

bad - static analysis tools are prone to a large number of false positives.

1.2 Dynamic analysis

good

  • high accuracy

bad

  • slow speed, low efficiency, high requirements on the technical level of tsters, poor scalability
  • it's difficult to carry out large-scale testing.

1.3 symbex

  • the path explosion
  • environment interactions
    • when target program execution interacts with components out of the symbolic execution environments, such as system calls, handling signals, etc., consistency problemsmay arise.
  • Previous work has proved that symbolic execution is still difficult to scale up to large applications.

1.4 Fuzzing

a fuzzing test starts with generating massive normal and abnormal inputs to target applications, and try to detect exceptions by feeding the generated inputs to the target applications and monitoring the execution states.

problem

  • Automatically crash analysis is another important field of research.

Table 1 compares the advantages and disadvantages of Fuzzing and other vulnerability detection technologies.

f:id:msy2456:20200426174157j:plain
Table1 Compatison of dirrerent techniques

1.4.1 Types of fuzzers

A fuzzer could be classified as generation based and mutation based.

generation based

  • knowledge of program input is required.
  • Forfile format fuzzing, usually a configuration file that predefines the file format is provided.
  • Testcases are generatedaccording to the configuration file
  • without a friendly document,analyzing the file format is a tough work.

so mutation based fuzzers are easier to start and more applicable, and widely used by SOTA fuzzers.

mutation based

  • a set of valid initial inputs are required.
  • Testcases are generated through the mutation of initialinputs and testcases generated during the fuzzing process.

f:id:msy2456:20200426174507j:plain

Table2 Comparison of generation based fuzzers and mutation based fuzzers

Fuzzer could be classified as white box, gray box and black box.

white box

  • more info could be collected through analysis on source code and how testcases affect the program runnning state.

gray box

  • gray box works without source code.

We list some common white box, gray box and black box fuzzers in Table3

f:id:msy2456:20200426174406j:plain
Table 3 Common white box, gray box and black box fuzzers

According to the strategies of exploring the programs, fuzzers could be classified as directed fuzzing and coverage-based fuzzing.

directed fuzzing

  • aims at genera-tion of testcases that cover target code and target paths of programs
  • expect a faster test on programs

coverage-based fuzzing

  • aims at generationof testcases that cover as much code of programs as possible.
  • expect a more thorough testand detect as more bugs as possible

both fuzzing method

  • how to extract the information of executed paths is a key problem.

Fuzzers could be classified as dumb fuzz and smart fuzz according to whether there is a feedback between the monitoring of program execution state and testcase generation.

dumb fuzz

  • Smart fuzzers adjust the generation of testcases according to the collected information that how testcases affect the program behavior.

mutation based fuzzer

  • feedback information could be used to determine which part of testcases should be mutated and the wayto mutate them.

smart fuzz

  • acquires a better testingspeed, while smart fuzzers generate better testcases andgain a better efficiency.

1.4.2 Key challenges in fuzzing

The challenges

  • how to mutate seed inputs
  • low code coverage
  • passing the validation

Testcases generated by black box and gray box fuzzers are hard to pass the validation for a blind generation strategy, which results in quite low efficient fuzzing.
=> how to pass the validation is another key challenge.

=>countermeasures

  • program instrumentation and taint analysis
  • RNN and LSTM

2. Coverage-based fuzzing

proved to be quite effectiveand efficient.

2.1 Code coverage counting

basic block

  • code snippets
    • entry point
    • exit point

SoTA methods take basic block as the best granularity

  1. basic block is the smallest coherent units of program execution.
  2. measuring function or instruction would resultin information loss or redundancy.
  3. 基本ブロックは、最初の命令のアドレスによって識別でき、基本ブロック情報はコード計測を通じて簡単に抽出できる。

instrumentation: 計装 - プログラム解析の分野では、「気になる箇所で解析の機会を得ること」

2.1.2 AFL

AFL provide two instrumentation mode

  • the compile-in instrumentation
  • the external instrumentation

the compile-in instrumentation

2.2 Working process of coverage-based fuzzing

testcases that reach new control flow edges are considered to be interesting.

fuzzers track the execution for two purposes

  • the code coverrage
    • The code coverage information is used to pursue a thorough program state exploration.
  • security violations
    • the security violation tracking is for better bug finding.

In the main fuzzing loop

  1. the fuzzer selects a favorite seed from the seed pool according to the seed selection strategy, and AFL prefers the fastest and smallest ones.
  2. seed files are mutated according to the mutation strategy, and a bunch of testcases are generated.

Good initial seed inputs can significantly improve the efficient and effectiveness of fuzzing.

  1. providing well format seed inputs could save lots of cpu times consumed by constructing one
  2. good initial inputs could meet the requirement for complicated file format, which are hard to guess in the mutation phase
  3. mutation based on well format seed input is more likely to generate testcases that could reach deeper and hard to reach paths
  4. good seed inputs could bereused during multiple test.

2.2.1 Key questions

  1. How to get initial inputs?
  2. How to generate testcases?
  3. How to select seed from the pool?
  4. How to efficiently test applications?

probabilistic context-sensitive grammar(PCSG): 確率的文脈依存文法 - https://www.slideshare.net/YusukeOda1/pcfg-51424675

good seed selection strategy, fuzzer could

  • prioritize seeds which are more helpful, including covering more code and be more likely to trigger vulnerabilities
  • reduce the waste of repeatedly execution of paths and save computing resource
  • optimally select seeds that cover deeper and more vulnerable code and help identifying hidden vulnerabilities faster.

In fuzzing, there are two key phases. 1. the testcase generation pahse 2. the program execution phase

2.3 Testcase generation

2.3.1 key challenge

  • how to generate testcase that fulfill the requirement of complex data structure and more likely to trigger hard-to-reach paths.

In generation based fuzzing

  • How to obtain the format information of inputs is a hard open problem.

In mutation-based fuzzing strategy

  • testcases are generated by modifying part of the seed inputs in the mutation process
  • how to determine the location to modify and the value used in modifying is another key challenge

3. Techniques integrated in fuzzing

3.1 Program execution

Two key problems involved in the execution phase

  • how to guide the fuzzing process
  • how to explore new path

Feedback-driven fuzzing provides an efficient way of guided testing.

3.2 Fuzzing towards different applications

According to characteristics of different target applications, different fuzzers and different strategies are used in practice.

3.2.1 file format fuzzing

Most applications involve file handling, and fuzzing is widely used in finding bugs of these applications

An important subfield of file format fuzzing is fuzzingon web browsers.

3.2.2 Kernel fuzzing

could be divided into two categories

  • knowledge based fuzzers
  • coverage guided fuzzers

fuzzing with kernel API function calls is faced with two main challenges

  • the parameters of API calls should have random yet well-formed values that follow the API specification
  • the ordering of kernel API calls should appear to be valid

3.2.3 Fuzzing of protocols

services may define their own communication protocols, which are difficult to determine theprotocol standards.

it is still very hard to followthe specification such as RFC document.

4. New trends of fuzzing

  1. smart fuzzing provides more possibilities for the improvement of fuzzing
  2. By collecting the target program execution information via various ways, smart fuzzing provides a more elaborate control of the fuzzing process, and lots of fuzzing strategies are proposed.

  3. new techniques could help improve vulnerability in many ways.

  4. new techniques
    • machine learning and related techiniques
  5. How to combine the advanages and characteristics of new techniques with fuzzing
  6. how to transform or split the key challenges in fuzzing into problems that new techniques are good at.

2月にやった事

はじめに

2月に取り組んだ事の簡単なまとめとなっております。

何をしたか

  • 過去問4年分を解いた
  • 数理論理学に取り組んだ

    • 命題論理、述語論理、自然演繹、LK体系など
  • パタヘネの消化

    • アドレッシング、キャッシュ、書き込み、読み取りあたり
  • 推定、検定のおさらい

  • オートマトンの復習

他にも色々やりましたが、細かすぎるので省略。

大体過去問に沿った内容に取り組みました。

数理論理学に関しては、学科でブール代数をやった程度だったので、大学の図書館やpdfを読み漁りながら問題に取り組みました。

まだまだこれからです。

3月にやる事

あたりを

2020年の目標

はじめに

クロトさんのエントリきなこさんのエントリに習い、僕もやることをリストアップしておこうと思います。

目標一覧

  • 積本の消化
  • 院試に合格する
  • x86エミュレータ自作
  • やられサイト的なものを作る
  • CTFの参加頻度を上げ、チームに貢献する
  • セキュキャン全国大会に参加する(応募する)
  • 卒論を書く

積読の消化

(ここのリストアップは下宿先に戻って書こうと思います。)

院試に合格する

現時点では、就活か院試か完全に踏み切れていない状況です。しかし、気持ちとしては後者の方が大きいです。 今月末には希望先のラボを見学する予定なので、それ次第で意向を固めようと思います。

x86エミュレータ自作

作りたいから作る。地道にやります。

やられサイト的なものを作る

現在、学友と3人で徳丸本を使った自主ゼミをしているのですが、そこで得た知識や技術を元にやられサイト的なものを作ろうと思います。

CTFの参加頻度を上げ、チームに貢献する

現在、某チームに所属しているのですが、2019年は全然貢献できませんでした。

2020年は参加頻度を上げ、普段からwriteupや問題を解く事でより難易度の高い問題を解き、チームに貢献できるようになりたいです。

セキュキャン全国大会に参加する(応募する)

同大学の友人が昨年参加したので、感想を聞いてみましたが、応募しなかった事を後悔したぐらいでした。今年こそは絶対応募します。

卒論を書く

いやだあ。。。。

2019年の振り返り

2019年も終わりを迎えた為、今年の振り返りをしていこうと思います.

今年の目標はここから

ブログを続ける
OSを作る
セキュリティキャンプに参加する
インターンに行く
英語の能力をあげる
人と会う
Lispやる
週1以上でジムにいく

ブログを続ける

何だかんだ続けられたのではないでしょうか。

はてブロ以外にもqiita(僕のページ)GitHub(僕のページ)の進捗を生やして, 昨年よりかは自己投資に費やせたと思います。

OSを作る

無理でしたァ!

10日目あたりで挫折してしまいました。

新しくx86対応の本が出版されたので、やるとしたらそちらをやると思います。

セキュリティキャンプに参加する

ごめんなさい、応募できませんでした。

応募できるのは、来年が最後なので来年こそは。。!

インターンに行く

NAISTに3週間ほど研究インターンに行ってました。(エントリはこちら)

これは行った甲斐が十分にありました。入学を検討してる方はぜひお勧めします。

英語の能力をあげる

他者からの評価と言えば、TOEICL&Rで705点取れました。

次は800点以上取ろうと思います。

人と会う

アバウトすぎる。イベントにもそこそこ出向いたし、まあ去年より会ったかな

Lispやる

やってません。関数型はしばらく触る予定がないかも。

週1以上でジムにいく

インターン前は週3ぐらいで通っていたのですが、それ以降は全然行ってません。

運動する機会は増やそうと思います。

おわりに

これら以外にも

  • 基本情報技術者を取った
  • CTFを始めた(最近できてない)
  • 自分の興味分野, 研究分野が定まった

3年生になって自分のやりたいことが決まったのも、色々動いて、手を動かし続けたおかげだと思います。現状にはまだ満足してないので、これからももっと頑張ります。


それでは、また次の記事(2020年の目標)でお会いしましょう。

cowrieでMiraiの亜種を観測した

ただの紹介なので中身スカスカです. ごめんなさい

こんにちは, ハニポ初心者のMsY(@py65criz)です.

サーバ型×低対話型のssh+telnetを観測するcowrieを構築して数日経つと, そこそこログが溜まるので中でも気になったものを観測したので, それの紹介をしようと思います.

SATORI

一日大体100件以上は接続要求を受けているのですが, 侵入した後,大体このSATORIが実行されていました. (/bin/busybox SATORI)

f:id:msy2456:20191206002123p:plain
SATORIが実行されている例

実はSATORIは2017年に回り出したマルウェアで, 以下にその詳細が述べられています.

ゼロデイ脆弱性を悪用してホーム ルータをボット化する、進化したIoTマルウェアが登場 - Palo Alto Networks

その他に

他にもOIWYO, KDBWU, CBWIGがそれぞれ1,2件紛れていました.

こちらもSATORI と似たような亜種だと思われます.

ただ, こちらはSATORIのようにwgetでファイルをダウンロードする挙動を示さずに帰って行ってました. おそらくハニーポットだとバレたせいだと思います.

課題点

1.ハニーポットだとバレにくいようにする
2.ログを読めるようにする.
3.検体の解析を頑張る(?

acmの学生会員になった.(追記あり)

インターン中(前回のエントリ参照)に色んな本を部分的に読んでてつい欲しくなっちゃったのですが, これ1冊ずつ買うより, サブスクリプション系のサービスに入った方がずっとお得なのでは..., と思い聞いた所, acmの学生会員になれば, Safari Books Onlineが最低でも年間US$19で利用できるということを教えて頂きました.

Membership Options


なお、Safari Books OnlineとはO'Reilly系の本が定額で読み放題のサービスです.(ただし全て英語)

何が読めるかは下から参照できます.

Safari Learning Platform


僕自身としては論文も読みたいので, 結局オプションをつけて, 年間US$42のStudent Membership plus ACM Digital Libraryを選びました.

まま、少々分厚い技術書1冊読むだけで元が取れますよ、ガハハ!!..
英語?なあに、グーグル翻訳でどうにかなりますよ、ガハハ!!..


これの何が凄いかというと, 普通にSafari Online Booksに入会しようとすると, 月々US$39, 年間だと$399という, 比べ物にならないほどお得なんですよ.

ね、入りません?

あとメアドが使えるようになります. @acm.orgてドメイン、滅茶苦茶カッコ良くないですか!!!??


他に情報が欲しい方は「acm safari」などでググってみたり, 参考先の記事や, 下のリンクから漁ってみてください.

Membership Benefits

[追伸]
こちら、数日前に弊Twitterにて呟いた内容をまとめなおしたものです.

[追伸2]
pdfやepubに出力しようにも無理でした。 恐らく、acm経由でsafariにログインする方法が通常と少し異なるせいだと思います。それでも構わないなら, 入る価値はあると思います。

GitHub - nicohaenggi/SafariBooks-Downloader: a SafariBooksOnline downloader that generates respective .epub books for offline and kindle reading

GitHub - lorenzodifuccia/safaribooks: Download and generate EPUB of your favorite books from Safari Books Online library.

参考

ACM Professional Membershipの登録 - 勘と経験と読経