OpenFaas をセットアップして function を呼び出す

OpenFaas をセットアップして function を呼び出す AWS lambda を何となく触ってみて、ベンダロックインしない形で同じような機能を実現できないかなと思って色々と調べているとOpenFaasというOSSを見つけた。 AWS lambda とAPI Gatewayをまとめた感じの処理をdockerを使って実現するプロジェクトのようだ。 試しに触ってみたのでその記録を書く。 OpenFaas とは Serverless な処理を Docker や Kubernetes で実装するためのフレームワーク。 公式で日本語化されたチュートリアルがある link OpenFaas のセットアップ 必要なソフトは下記の通り Docker まずは OpenFaas を動かすための swarm をセットアップ $ docker swarm init openfaas-cli のインストール 次に OpenFaas を動かすためのCLIコマンドをインストールする。 ここでインストールするfaas-cliを使用すればCLIからfunctionの新規作成、ビルド、デプロイ等の操作ができるようになる。 mac環境なら以下のコマンドでインストール $ brew install faas-cli Linux とかの環境なら下記のコマンドでインストール $ curl -sL cli.openfaas.com | sudo sh インストールされたか確認 $ faas-cli version OpenFaasのデプロイ GitHub から最新版の OpenFaas をダウンロードして Docker swarm で起動させる。 $ git clone https://github.com/openfaas/faas $ cd faas $ git checkout master $ ./deploy_stack.sh --no-auth OpenFaas で function を動かす 試しにいくつか function をデプロイしてみる。 ...

March 26, 2020 · 1 min · 148 words · FAMASoon

retdecでHello, worldをデコンパイルする

retdec とは retdec とはセキュリティ企業のavast社が公開しているデコンパイラです。 詳細はavast社のブログを参照(アバストが自社のマシンコード逆コンパイラをオープンソース化) ちゃんとデコンパイルするのか気になったのでインストールから"Hello, world"をデコンパイルする所まで書きます。 実行環境 当記事は下記環境で実行した結果を書いています。 $ uname -a Linux ubuntu 4.15.0-36-generic #39~16.04.1-Ubuntu SMP Tue Sep 25 08:59:23 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux $ gcc --version gcc (Ubuntu 5.4.0-6ubuntu1~16.04.10) 5.4.0 20160609 $ docker -v Docker version 18.06.1-ce, build e68fc7a retdec をインストール dockerを使用してビルドする。 ビルドが終わるまでそこそこ時間がかかるのでコーヒーでも飲んで待っていましょう。 $ git clone https://github.com/avast-tl/retdec $ cd retdec $ docker build -t retdec . デコンパイルしてみる ビルドが終わったらデコンパイルできるか試してみます。 まずはサンプルとして"Hello, world"を書きます。 #include <stdio.h> int main(int argc, char *argv[]){ printf("Hello, world\n"); return 0; } 次にこのコードをコンパイルします。 一点、注意が必要でretdecはx86-64のコードには対応していません。 なので今回はx86でコンパイルします。 ...

March 26, 2020 · 1 min · 196 words · FAMASoon

Serverless Framework でHello world

概要 Serverless Framework とはサーバレスなアプリケーションを作成、デプロイが簡単にできるツール。 AWS Lambda や Google Cloud Functions といったFaasの実装や、API Gateway の構成変更が容易にできる。 今回はAPI Gateway経由でAWS Lambdaを呼び出してみる。 環境構築 インストール まずは Serverless Frameworkをインストール。 $ npm install serverless -g インストールが完了したらデプロイする際に必要なAWSのユーザ情報を作成する。 IAMユーザの作成・登録 Serverless Framework をAWSで利用するには色々と権限を付与したユーザを用意する必要がある。 公式でセットアップ手順が記載されているのでその通りにユーザを作成する。 AWSのIAM管理コンソールを開く “ユーザを追加"をクリックする 適当にユーザ名を入力する。ここでは"serverless-agent"とする。 “プログラムによるアクセス"にチェックボックスを入れ"次のステップ"をクリック “既存のポリシーを直接アタッチ"から"ポリシーの作成を選択” JSONをクリックし公式で案内しているgistから内容をコピペして上書き ポリシーの確認をクリック 適当にポリシー名を入力する。ここでは"serverless-agent-policy"とする。入力したらポリシーの作成をクリック。 ポリシーが作成されたらユーザを追加の画面に戻ってポリシーをリロード ポリシーから"serverless-agent-policy"を選択して"次のステップ"をクリック 次のステップ: 確認をクリック ユーザの作成をクリック ユーザの作成が成功したらアクセスキーIDとシークレットアクセスキーが表示されるので下記コマンドで Serverless Framework にユーザ情報を登録する。 $ serverless config credentials --provider aws --key <アクセスキーID> --secret <シークレットアクセスキー> これで Serverless Frameworkからサーバレスアプリケーションをデプロイするための準備ができた。 アプリケーションの作成 今回はPython 3.7 でアプリケーション(といっても中身はHello world)を作る。 Serverless Framework はslsという短いコマンドから操作できるので、これを用いてアプリケーションを実装していく。 ...

March 26, 2020 · 2 min · 235 words · FAMASoon

Vuepress で生成したWebサイトを Now にデプロイしてみる

Vuepress とは Vuepress とは Vue で作られた静的サイトジェネレータのこと。 静的サイトジェネレータといえば有名どころは jekyll Hugo などが挙げられる。 Vueで静的にサイトを作るのなら Nuxt.js でも良さそうにも思えるが、Vuepressは技術文書を静的に管理することに焦点を当て作成している。 why-not Vuepress インストール 下記コマンドでインストールできる。 $ npm install -g vuepress Vuepress を使ってみる Vuepress はREADME.mdを起点にサイトを生成するようになっている。 実際にどのように動作するか下記のREADME.mdを作成して確認する。 # h1 ## h2 ### h3 #### h4 ##### h5 Headers ## List * Item 1 * Item 2 * Item 3 + Item 3-1 + Item 3-2 ## Link [Vuepress](https://vuepress.vuejs.org) README.mdのあるディレクトリで下記コマンドで動作を確認できる。 $ vuepress dev HTMLファイル等を生成するには下記コマンドを入力する。 $ vuepress build Now とは Nowとは簡単にWebアプリをデプロイできるサービスのこと。 CLIからコマンド一回でデプロイすることができる。 今回作成したサイトをさくっと公開するために使ってみる。 このデプロイの仕方はNow公式でも書かれている。 nowコマンドの使い方 ...

March 26, 2020 · 1 min · 143 words · FAMASoon

x64の関数呼び出し

概要 関数呼び出しの解説でよくあるx86プログラムみたいな動きをx64でやってみる 環境 $ uname -a Linux ubuntu-xenial 4.4.0-97-generic #120-Ubuntu SMP Tue Sep 19 17:28:18 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux $ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 16.04.3 LTS Release: 16.04 Codename: xenial $ gcc --version gcc (Ubuntu 5.4.0-6ubuntu1~16.04.5) 5.4.0 20160609 x86でコンパイル まずはx86でのスタックの動きを書く。 まずは下のコードを"stack_test.c"として保存する。 void test_func(int a, int b, int c, int d){ int x, y, z; x = a + b; y = c + d; z = x + y; } int main(void){ test_func(1, 2, 3, 4); return 0; } これをコンパイルして"x86"というファイルで保存し、ディスアセンブルする。 $ gcc -O0 -m32 stack_test.c -o x86 $ objdump -d -M intel x86 | grep -A11 "main>:" 080483f9 <main>: 80483f9: 55 push ebp 80483fa: 89 e5 mov ebp,esp 80483fc: 6a 04 push 0x4 80483fe: 6a 03 push 0x3 8048400: 6a 02 push 0x2 8048402: 6a 01 push 0x1 8048404: e8 d2 ff ff ff call 80483db <test_func> 8048409: 83 c4 10 add esp,0x10 804840c: b8 00 00 00 00 mov eax,0x0 8048411: c9 leave 8048412: c3 ret $ objdump -d -M intel x86 | grep -A14 "test_func>:" 080483db <test_func>: 80483db: 55 push ebp 80483dc: 89 e5 mov ebp,esp 80483de: 83 ec 10 sub esp,0x10 80483e1: 8b 55 08 mov edx,DWORD PTR [ebp+0x8] 80483e4: 8b 45 0c mov eax,DWORD PTR [ebp+0xc] 80483e7: 01 c2 add edx,eax 80483e9: 8b 45 10 mov eax,DWORD PTR [ebp+0x10] 80483ec: 01 c2 add edx,eax 80483ee: 8b 45 14 mov eax,DWORD PTR [ebp+0x14] 80483f1: 01 d0 add eax,edx 80483f3: 89 45 fc mov DWORD PTR [ebp-0x4],eax 80483f6: 90 nop 80483f7: c9 leave 80483f8: c3 ret main関数で引数をプッシュし"test_func"で使用している。 また、ローカル変数を確保するためにespを減算している。 ...

March 26, 2020 · 6 min · 1072 words · FAMASoon

Extract Windows KB

手順 Windows Updateのセキュリティパッチから差分を撮ってみる 問題となっているCVE番号で https://portal.msrc.microsoft.com/en-us/security-guidance を調べる(今回例としてはCVE-2019-0786について) 当該脆弱性のアドバイザリがあればそれを開く https://portal.msrc.microsoft.com/ja-JP/security-guidance/advisory/CVE-2019-0786 “Secuirty Update"から回答のアップデートをダウンロード msuファイルをダウンロード ダウンロードしたmすふぁいるを展開する wusa.exe C:\installl.msu /extract:c:\test\ または expand /f:* C:\install.msu C:\test\ msuファイルを展開して出てきたcabファイルを更に展開 expand -F:* update.cab C:<target_dir> Ghidraで差分を確認 Ghidra Pro book に載っているので要参照 終わり

March 15, 2020 · 1 min · 31 words · FAMASoon

HackTheBox Walkthrough - Granny

About Granny Granny Nmap Port scan revelals IIS 6 running on this machine. # nmap -sV -sT -sC -o nmapinitial 10.10.10.15 Starting Nmap 7.70 ( https://nmap.org ) at 2020-01-25 10:55 EST Nmap scan report for 10.10.10.15 Host is up (0.22s latency). Not shown: 999 filtered ports PORT STATE SERVICE VERSION 80/tcp open http Microsoft IIS httpd 6.0 | http-methods: |_ Potentially risky methods: TRACE DELETE COPY MOVE PROPFIND PROPPATCH SEARCH MKCOL LOCK UNLOCK PUT |_http-server-header: Microsoft-IIS/6.0 |_http-title: Under Construction | http-webdav-scan: | WebDAV type: Unkown | Server Date: Sat, 25 Jan 2020 15:56:14 GMT | Public Options: OPTIONS, TRACE, GET, HEAD, DELETE, PUT, POST, COPY, MOVE, MKCOL, PROPFIND, PROPPATCH, LOCK, UNLOCK, SEARCH | Allowed Methods: OPTIONS, TRACE, GET, HEAD, DELETE, COPY, MOVE, PROPFIND, PROPPATCH, SEARCH, MKCOL, LOCK, UNLOCK |_ Server Type: Microsoft-IIS/6.0 Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 29.67 seconds IIS 6 exploitation This machine is runnig IIS 6 and searchsploit shows there’s an MSF exploit for it. ...

February 2, 2020 · 7 min · 1291 words · FAMASoon

Note - Links for OSINT

Links Link Title Note https://domainwat.ch/ DomainWatch Show whois and domains info https://www.similarweb.com/ja SimilarWeb Analyze web site https://myip.ms/ Myip.ms Show IP address or domain’s info https://website.informer.com/ website.informer.com Show web site information https://domainbigdata.com/ DomainBigData Show domains information http://www.ymkp.com/ 域名科普网 Search whois information that focused on Chinese area https://tools.digitalpoint.com/cookie-search Cookie Search Search cookies https://www.shodan.io/ Shodan Search engine for Internet-connected devices https://censys.io/ Censys Search engine for Internet-connected devices https://www.robtex.com/ Robtex Research of IP numbers, Domain names, etc https://otx.alienvault.com/ AlienVault OTX Share threats info http://spyonweb.com/ SpyOnWeb Show web sites some info https://urlscan.io/ urlscan.io Scan and analyse websites https://intelx.io/ Intelligence Search engine and data archive https://crt.sh/ crt.sh Search engine for certificate Transparency https://www.immuniweb.com/ssl/ ImmuniWeb SSL Security Test https://www.dnstree.com/ DNS Tree Show DNS tree graph

January 23, 2020 · 1 min · 118 words · FAMASoon

Crash JSON in golnag

内容 下記のコードを見てほしい。 package main import ( "encoding/json" "fmt" ) func main() { var JSONDATA = []byte(`{\"\":'AAAA'}`) fmt.Printf("%v\n", JSONDATA) var raw map[string]interface{} err := json.Unmarshal(JSONDATA, &raw) if err != nil { panic(err) } fmt.Printf("%v\n", raw) } JSONをインターフェースにアンマーシャルしている。 これで構造体の中身が可変でもまぁ何とかUnmarshalできる。 では実行してみよう。 $ go run main.go panic: invalid character '\\' looking for beginning of object key string goroutine 1 [running]: main.main() /Users/doejohn/work/projects/fuzz_go/fire/json/case2/main.go:13 +0x13c exit status 2 うーむ、エラー内容をみるに本来\"\"として認識する所を\\として認識してエラーが発生しているよう…? ちょっと手を加えてきちんと"とかを認識しているか確認。 package main import ( "encoding/json" "fmt" ) func main() { var JSONDATA = []byte(`{\"\":'AAAA'}`) fmt.Printf("%v\n", JSONDATA) var raw map[string]interface{} err := json.Unmarshal(JSONDATA, &raw) if err != nil { panic(err) } fmt.Printf("%v\n", raw) } しっかりとJSONDATAは[]byteとして作成されているようだ。 しかし結果は変わらない [123 92 34 92 34 58 39 65 65 65 65 39 125] panic: invalid character '\\' looking for beginning of object key string goroutine 1 [running]: main.main() /Users/doejohn/work/projects/fuzz_go/fire/json/case2/main.go:14 +0x1d6 exit status 2 って、よく見たらAAAAの部分を\でエスケープしていないじゃん。 ついでに`で囲っていた部分を"に変えた。 微妙にヒアドキュンとと普通の文字列扱いだと挙動が異なるような気がしたからだ(間違っていたらツッコンでください) ということでエスケープしてみた。 ...

December 12, 2019 · 1 min · 193 words · FAMASoon

gif画像をFuzzingして確認したクラッシュケース

gif画像をFuzzingして確認したクラッシュケース 下記のコードを見てほしい。 package main import ( "bytes" "fmt" "image/gif" "reflect" ) func main() { img, err := gif.DecodeAll(bytes.NewReader([]byte("GIF89a0\x0000000!\xf9\x04\xf9000\x00,0\x000\x00\x00\x000\x00\x80000000\x02\x00;"))) if err != nil { panic(err) } w := new(bytes.Buffer) err = gif.EncodeAll(w, img) if err != nil { panic(err) } img1, err := gif.DecodeAll(w) if err != nil { panic(err) } img1.Disposal = img.Disposal if !reflect.DeepEqual(img, img1) { fmt.Printf("gif0: %#v\n", img) fmt.Printf("gif1: %#v\n", img1) panic("gif changed") } } gif画像をEncodeしてDecodeしてreflect.DeepEqualで内容が一致しているか確認しているコードだ。 一見すると内容は一致してそうだし、特にpanic等に入らずそのまま終了しそうなコードだ。 では結果を見てみよう。 $ go run main.go gif0: &gif.GIF{Image:[]*image.Paletted{(*image.Paletted)(0xc0000ac120)}, Delay:[]int{12336}, LoopCount:-1, Disposal:[]uint8{0x6}, Config:image.Config{ColorModel:color.Palette(nil), Width:48, Height:12336}, BackgroundIndex:0x0} gif1: &gif.GIF{Image:[]*image.Paletted{(*image.Paletted)(0xc0000ac180)}, Delay:[]int{12336}, LoopCount:-1, Disposal:[]uint8{0x6}, Config:image.Config{ColorModel:color.Palette(nil), Width:48, Height:12336}, BackgroundIndex:0x0} panic: gif changed goroutine 1 [running]: main.main() /home/ubuntu/workspace/fuzzing/docker-go-fuzz/fire/gif/main.go:29 +0x30a exit status 2 reflect.DeepEqualで確認したところ内容の不一致が起きていることがわかる。 違う内容といえばGIF構造体のImage []*image.Paletted部分である。 ...

December 8, 2019 · 6 min · 1268 words · FAMASoon