Skip to content

Commit

Permalink
Merge pull request #6 from 3c7/feature/tls-hashes
Browse files Browse the repository at this point in the history
Implement ja3, ja3s and jarm hashes for TLSComponent
  • Loading branch information
3c7 authored Jul 28, 2022
2 parents bdc30aa + 28a432d commit 5b4e2b9
Showing 1 changed file with 31 additions and 5 deletions.
36 changes: 31 additions & 5 deletions common_osint_model/models/tls.py
Original file line number Diff line number Diff line change
Expand Up @@ -319,7 +319,10 @@ def from_binaryedge(cls, d: Union[Dict, List]):

class TLSComponent(BaseModel, ShodanDataHandler, CensysDataHandler, BinaryEdgeDataHandler, Logger):
"""Represents the TLS component of services."""
certificate: TLSComponentCertificate
certificate: Optional[TLSComponentCertificate]
ja3: Optional[str]
ja3s: Optional[str]
jarm: Optional[str]

# Todo: Add other attributes relevant to TLS such as CipherSuits etc.

Expand All @@ -331,15 +334,19 @@ def from_shodan(cls, d: Dict):
f"but it was {type(d)}.")

return TLSComponent(
certificate=TLSComponentCertificate.from_shodan(d)
certificate=TLSComponentCertificate.from_shodan(d),
ja3s=d.get("ssl", {}).get("ja3s", None),
jarm=d.get("ssl", {}).get("jarm", None)
)

@classmethod
def from_censys(cls, d: Dict):
try:
tls = d["tls"]
return TLSComponent(
certificate=TLSComponentCertificate.from_censys(tls["certificates"]["leaf_data"])
certificate=TLSComponentCertificate.from_censys(tls["certificates"]["leaf_data"]),
ja3s=tls.get("ja3s", None),
jarm=d.get("jarm", {}).get("fingerprint", None)
)
except KeyError as e:
cls.error(f"Exception during certificate data extraction. "
Expand All @@ -349,7 +356,26 @@ def from_censys(cls, d: Dict):
@classmethod
def from_binaryedge(cls, d: Union[Dict, List]):
"""Creates an instance of this class based on BinaryEdge data given as dictionary."""
certificate_chain = d["result"]["data"]["cert_info"]["certificate_chain"]
data = d.get("result", {}).get("data", None)
if not data:
cls.error("No data key available in binary edge dictionary. Returning None...")
return None

cert = None
if "cert_info" in data:
cert = TLSComponentCertificate.from_binaryedge(
data["cert_info"]["certificate_chain"][0]
)
ja3 = None
if "server_info" in data:
ja3 = data["server_info"]["ja3_digest"]

jarm = None
if "jarm_hash" in data:
jarm = data["jarm_hash"]

return TLSComponent(
certificate=TLSComponentCertificate.from_binaryedge(certificate_chain[0])
certificate=cert,
ja3=ja3,
jarm=jarm
)

0 comments on commit 5b4e2b9

Please sign in to comment.