ホワイトハッカーってかっこいいよね

hackthebox.connpass.com

ストーンビートセキュリティさんの勉強会に参加してきました。

今回は全10回になるペネトレーションテスト勉強の記念すべき第一回。
2~3年前にも同様の勉強会をやっていて今回はリバイバル版だそう。開催に感謝!

ペネトレーションテストとは

  • システムの安全性評価の手法
  • 実際の攻撃者が悪用する技術でシステムへの侵入可否や侵入後の影響などを調査

手順

  1. 情報収集
  2. 攻撃シナリオの立案
  3. 脆弱性調査
  4. 脆弱性の悪用
  5. 侵入後の影響調査
  6. 報告

オーシャンズ11」のイメージとのこと

若ブラピカッコいいなあ...「セブン」も好き

[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]

オーシャンズ11【Blu-ray】 [ ジョージ・クルーニー ]
価格:1,650円(税込、送料無料) (2023/6/7時点)


なぜ攻撃手法を学ぶのか?

攻撃手法を学ぶことで守りに転用する
「攻撃は最良の防御」

脆弱性とペンテスター

脆弱性の種類

  • 技術的(ハードウェア、ソフトウェア)
  • 物理的(装置や設備、設置場所)
  • 組織的(管理体制、管理手順など運用の欠陥)
  • 人的(人の行動、言動)

技術的な脆弱性の例

脆弱性でよく言われる「任意のコードが実行可能」って何?
→shellやコマンドが実行できる状態

講師デモ(root権限の取り方)

Hack the boxのTraversec
https://app.hackthebox.com/machines/217

  • わざと脆弱性のあるマシンを攻撃する
  • ユーザー権限とシステム権限を取得する時間がユーザー毎に表示される

雑メモ

  1. まずpingで通信確認
  2. portスキャン(nmap)でパケットを送って空いてるポートを探す
  3. sshでコネクション確認
  4. ブラウザで確認(ディレクトリとか入力フォームとか)
  5. cheat.shでコマンドオプションの確認しつつ
  6. gobusterで辞書リスト攻撃
  7. ポート指定で深く調査(バージョンチェック)
  8. ソフトウェアとバージョンがわかったらググってみる("exploit"と検索ワードに含めてみたりする)
  9. EXPLOIT DATABASEで実証用の攻撃コードが公開されている
  10. serchsploitで脆弱性リストを表示させる
  11. 攻撃コードを実行して脆弱性が生きているか確認する
  12. 待受ポートを立てる
  13. サーバに侵入する(コマンドでshellが使える状態にする)
  14. ls等のコマンドで内部を覗く
  15. 知らない情報(ソフトウェア等)に遭遇したら都度よく調べる
  16. 重要そうなファイルをncコマンドで窃取
  17. ファイルから秘密鍵を入手
  18. パスワードを奪取
  19. 秘密鍵とパスワードで正当ユーザーとしてログイン(ユーザー権限獲得)
  20. catコマンドで色々ファイルの中身を見ていく
  21. 権限昇格とかの情報を知れる便利なサイトGTFOBins
  22. !/bin/shを実行(root権限獲得)

ペネト関連資格の紹介、勉強の進め方

資格は幅広くある
pauljerimy.com
第一歩としてCompTIAあたり?
Hack The Boxでも最近資格制度を始めている

ペネトレーションテストをやる時はテストの実施許可・同意を必ず得ること
基本は専用のサイトで学ぶ

今後の予定、次回以降の準備

  • Hack the boxのアカウント作る
  • お金に余裕があればVIP会員にもなっておくとなおよし

所感

  • 3~4年前に8946とかのサイトでハッキングの練習してたのを思い出して懐かしい気持ち
    • (調べたら8946閉鎖されててびっくり)
  • M1 Mac使ってるのでKali入れるのに一手間いりそうな予感がする


マッチングエンジンに関する勉強会メモ

ビットバンク株式会社の勉強会にお邪魔してきました。
何気にディスコードでの勉強会参加したの初めてかも!
bitbank.connpass.com

登壇者

エンジニア
尾島さん

営業(進行役)
鈴木さん

ビットバンクのマッチングエンジン

  • 秒間処理件数
    • 2500件/s

ある程度処理が増えてきたらシステムがビジー状態をユーザーに返すことで一定時間注文を受け付けなくするそう
これによって基本的に秒間処理件数をオーバーする事はない見込み

  • 注文日数
    • 最大2000万件弱
    • 直近1000万弱

ちなみにアローヘッドは1日で2億件も捌いてるらしい
すごいスケールだぁ

マッチングエンジンは内製

フロント:

TypeScript

DB:

MySQL
Aurora
(AWSの東京リージョン)

注文を捌くための工夫

  • 性能面
    • オンメモリ処理
    • I/Oの削減、局所
    • パフォーマンスチューニング

特にI/O削減の効果は大きいとのこと

工夫

  • 拡張性を意識した設計
    • CQRS × Event Sourcing
  • 拡張性を意識した管理機能
    • 動的な手数料変更
    • 動的なペア追加

つまりキャンペーンの開始/終了とかをノーメンテでできる。
この管理機能めっちゃ欲しい!

最後に

今後の課題として信用取引やIFD/OCDの実装も考えているとのこと。
仮想通貨の信用取引は株とかよりもまた複雑な処理になりそうなイメージなので、実装のあかつきにはまた勉強会で苦労話とかの裏側を聞いてみたい!

Macのトラックパッドでもミドルクリック(ホイールクリック)を使いたい

前提:Macは標準機能でミドルクリックできない

Windowsでは指3本タップで可能

解決方法:MiddleClick.appをインストールする

github.com

公式サイトでは Homebrewでのインストールを推奨しています。
ターミナルから下記コマンドを実行

brew install --cask --no-quarantine middleclick

インストール後、アプリケーションフォルダに格納されているMiddleClick.appを起動すれば準備OK

ミドルクリックでできること

  1. タブを閉じる
  2. リンクを新しいタブで開く
  3. ブックマークバーのフォルダ内ブックマークを全部開く
  4. ターミナルで選択しているテキストをペーストする
ミドルクリックでより快適にトラックパッドを使おう!

useEffect has missing dependencyのエラーを消したい

経緯
ESLintのuseEffect has amissing dependencyというwarningを放置したままpushしたら
Netlifyの自動デプロイに失敗していた


原因
useEffect内で依存関係のある変数を使用
かつ
useEffectの第二引数が空配列の場合


解決方法

  1. 依存関係を解消する(dependencyが更新されるたびにuseEffectが実行されてしまう)
  2. 特定行だけESLintのルールを無効にする(今回はこれ)
  3. package.jsonの設定でESLintを無効にする(コード全体で無効になる)


下記コメントを挿入することで次の行のwarningを無効にできる

// eslint-disable-next-line react-hooks/exhaustive-deps

useEffect(() => {
  if (state.requestStates !== requestStates.loading) { return; }
  fetchReposApi();
  // eslint-disable-next-line react-hooks/exhaustive-deps
}, [state.requestStates]);

第二引数を空配列にしているuseEffectが2回呼ばれてしまう

原因:
create-react-appで作成したアプリのindex.tsxが使用しているの機能

意図しない副作用の検出のためにコンポーネントを2度呼ぶようにしている。
ja.reactjs.org

StrictModeの利点:

  • 安全でないライフサイクルの特定
  • レガシーな文字列 ref API の使用に対する警告
  • 非推奨な findDOMNode の使用に対する警告
  • 意図しない副作用の検出
  • レガシーなコンテクスト API の検出
  • state の再利用性を保証する

これは検証用の機能であり、開発モードでのみ適用されるため本番環境においては問題なし。

読書メモ-思い通りに人を動かすヤバい話し方

yes, but話法ではなくyes,by the way話法を使う

例)
客「MacBook Proを買いたいが高い」
店員「おっしゃる通りで(Yes)、決して安くないと思います。ところで(by the way)何と比べて高いと思われたんですか?」
客「今使っているPCが10万円くらいで」
店員「それは高く感じますよね。ところで(by the way)なぜ今回はMacBook AirではなくMacBook Proをお探しなんですか?」
客「動画編集をしているのでMacBook Airだとスペック的に足りないんです」

yes, butだと否定で終わってしまうため、by the wayでこちらが提案したい内容に対して客自身から肯定的な意見を引き出させる

ポジショニングのコツはわかりやすいイメージ(形から入る)

「ベタ」は万人の共通認識
カレー屋:日焼けする
占い師:スピリチュアルな格好
教祖:神秘的な格好

メラビアンの法則

別名「7:38:55の法則」
人の印象の割合は下記の通り
7%:言語情報(何を言っているか)
38%:聴覚情報(声)
55%:視覚情報(見た目)

どのような見た目の人がどんな声、どんな振る舞いで話すかが大切
何を言っているかはさほど重要ではない

ブサイクは雰囲気イケメンになれ

話を聞いてもらうためには最低限の見た目が必要

ある程度のお金をかければある程度の身だしなみはできる
「ブサイクは容姿に金をかけない」
⇨ブサイクはブサイクゆえのマインドによってブサイクのままでいる

ダサいから抜け出すチェックリスト
1.服・靴・鞄のサイズ、コーディネート、組み合わせ
2.毎日のスキンケア(最低限風呂上がりのワセリンだけでOK)
3.5000円以上の美容室で月1回以上のカット
└合う髪型をカウンセリングしてカットしてくれるライン
4.ヒゲ脱毛
5.筋トレ

人に対して肯定を引き出す訪ね方

「わかりやすく言うと、〜みたいなものです。なんとなくわかりましたか?」
こちらにとって都合の悪いものをわざと複雑な単語を使って誤魔化した後にこのフレーズが使われる

人は馬鹿とは思われたくないため、よくわかっていなくても自分に嘘をついてわかったふりをしてしまう

SPA開発時に知っておきたいこと3選

1.ページ切替の際にサーバにリクエストが飛ばないためアクセス解析が困難

ソリューションとしては、
URLが書き変わる際にEffect Hookでアクセス解析(Google Analytics等)にリクエストを発行する処理を差し込む必要がある

2.サーバがHTTPステータスコードを返せない

既存のページを削除したときにサーバが404を返さないので検索エンジンのインデックスに残り続ける
そのためサイトマップGoogle Analyticsの管理機能でフォローする必要がある。

3.ルーティングの適用単位はコンポーネント単位

サーバサイドアプリケーション(Railsの場合)
URL ⇨ controller ⇨ view経由でページ全体が描画される


React
ルート階層下のコンポーネントそのものがルーティングされる