T-4D — Crypto Consultant, 4 days

Lab guide · Isla Mercantile Group · 4 days, 1235m net

Schedule

TimeBlockMinutes
09:00I-M0 — Welcome & client brief15
09:15I-M1 — Crypto 10160
10:15I-M2 — How Insights sees (live)45
11:00Break15
11:15I-M3 — Dashboard tour75
12:30Lunch45
13:15I-TAG — Tag teams: build the chain45
14:00I-M4 — Compliance & risk40
14:40Break15
14:55I-M5 — Hands-on lab40
15:35Wrap-up15
09:00I-M6 — Crypto deep-dive60
10:00I-M7 — Threat on the wire50
10:50Break15
11:05I-M9 — Beyond TLS35
11:40I-M10 — Operationalise45
12:25Lunch45
13:10I-M8 — Quantum & CBOM50
14:00K-1 — Outside-in with Kartis45
14:45Break15
15:00K-2 — Is the C2 ours?35
15:35Quiz20
15:55Wrap-up15
09:00I-M11 — Capstone (inside + outside)50
09:50Break15
10:05C0 — Engagement kickoff15
10:20C1 — The consultancy craft45
11:05C2 — Maturity quick-scan (CMB)30
11:35C3 — Baseline assessment (CBA)70
12:45Lunch45
13:30C4 — Inventory intake45
14:15Break15
14:30C5 — Outside-in view: register versus reality50
15:20Wrap-up15
09:00C6 — Verify in the field35
09:35C9 — Supplier crypto risk (TPRM)40
10:15Break15
10:30C7 — Design & policy40
11:10A1 — Crypto agility10
11:20X1 — Inside-out meets outside-in30
11:50C8 — Report & readout50
12:40Wrap-up20

Before you start

Log in

Your slip has your own credentials. Nobody shares a login; working in pairs on one login (one drives, one checks) is fine.

SystemAddressLoginUsed in
Eon Insightshttps://insights.edu.eoncore.nettraineeNNI-blocks, I-TAG, X1
Eon Centerhttps://center.edu.eoncore.nettraineeNN (org_admin of team-NN)C-blocks, K-blocks, X1
Center, Kartis pages onlyhttps://center.edu.eoncore.netkNN (kartis_only)K-blocks in the Insights + Kartis tracks
Isla public siteshttps://<vhost>.isla.edu.eoncore.netnoneI-M2, K-1, C6, I-M11

In Center, switch the UI to EN on first login. Your Center organisation team-NN has one customer: Isla Mercantile Group (team-NN). traineeNN and kNN are both members of team-NN and work on that same customer.

Shared environment

Isla at a glance

Client: Isla Mercantile Group, retail and payments, Curaçao. Internal names <host>.<app>.isla.test in 10.20.0.0/16; public names <vhost>.isla.edu.eoncore.net.

App (team)Internal hostsSubnetPublic vhosts
webshopshop, api, db, pay .webshop.isla.test10.20.1.0/24www, shop, api, pay
intranetsso, portal, cache .intranet.isla.test10.20.2.0/24intranet
paymentsgw, vpn, hsm .payments.isla.test10.20.3.0/24none
loyaltyapp, api, old .loyalty.isla.test10.20.4.0/24loyalty, loyalty-old

Hosts outside isla.test and isla.edu.eoncore.net are background noise. Search isla.test to hide them.

Client documents (handed out per block): client brief, ckm-intake.xlsx, register.xlsx, register-flawed.xlsx.


Exercises

I-M0 — Welcome & client brief

09:00 · 15 min

ExerciseTaskFinding
I-M0.1Log in to Insights; note the number of unique hosts on Home. Ask the Chat which hosts under isla.test have the lowest level. Center tracks: also log in to Center—

I-M1 — Crypto 101

09:15 · 60 min

ExerciseTaskFinding
I-M1.1Classify ten algorithms and suites as insecure, weak, secure or recommended, one sentence each (standard: items 1, 2, 5, 6, 10)F01, F02, F08
I-M1.2 (full)Ask the Chat why 3DES is weak; check for SWEET32, 64-bit block, mitigationF02

I-M2 — How Insights sees (live)

10:15 · 45 min

ExerciseTaskFinding
I-M2.1Note your source IP and the time. Browse to https://www.isla.edu.eoncore.net and https://pay.isla.edu.eoncore.net. Find your own handshakes in Handshakes (last 15 min, filter SNI); note TLS version, cipher, JA3F02
I-M2.2Compare your JA3 with a neighbour on the same browser and one on another browser—
I-M2.3 (full)Force a 3DES handshake with openssl (appendix B.1) and find it in InsightsF02

I-M3 — Dashboard tour

11:15 · 75 min

ExerciseTaskFinding
I-M3.1Hosts: filter insecure + weak, search isla.test, last 7 days. List host and levelF01, F02, F05, F07, F08, F13
I-M3.2HostDetails db.webshop.isla.test: worst TLS version, insecure suite, cert key. Why insecure, not weak?F01
I-M3.3Certificates, sort Valid until ascending: first Isla certificate, days left, hostF03
I-M3.4 (full)Copy a client's JA3, search Handshakes for it, count source IPs—

I-TAG — Tag teams: build the chain

13:15 · 45 min

ExerciseTaskFinding
I-TAG.1Find every host of your app; split the list; tag each with app:, tier:, env:, owner: via HostTagsEdit—
I-TAG.2Build the chain view through the Chat (appendix A.1), fix missing tags, Save as View, note the view id—
I-TAG.3One minute per team: weakest link, finding, owner, whyF01, F03, F05, F08

I-M4 — Compliance & risk

14:00 · 40 min

ExerciseTaskFinding
I-M4.1Compliance, severity critical: host, framework, rule per row. Standard: open the TLS 1.0 host (first seen, guidance, owner); filter high for 3DES and the certificate findingF01, F02, F03
I-M4.2 (standard)Ask the Chat for a remediation plan for TLS 1.0 on db.webshop.isla.test, then for 3DES on pay.webshop.isla.testF01, F02

I-M5 — Hands-on lab

14:55 · 40 min

ExerciseTaskFinding
I-M5.1One per team: upload webshop.pcap (the webshop chapter file from the trainer). Everyone: find your team's upload and the webshop hosts—
I-M5.2Hosts insecure + weak, search isla.test; worst host per appF01, F02, F05, F07, F08, F13
I-M5.3Compliance, pay.webshop.isla.test: frameworks, severity, remediation of the 3DES findingF02
I-M5.4First expiring Isla certificate: days left, host, tier and owner tags, impactF03
I-M5.5Quiz: en/assessment/quiz.md or the quiz app. Alone—

I-M6 — Crypto deep-dive

09:00 · 60 min

ExerciseTaskFinding
I-M6.AParse TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 and TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256; verdict per suite—
I-M6.BMatch BEAST, Lucky13, FREAK, SWEET32, ROBOT to the component they exploit—
I-M6.CFind which Isla hosts expose each attack class (appendix A.2); host FQDN and IPF01, F02, F08, F13

I-M7 — Threat on the wire

10:00 · 50 min

The trainer plays the beacon chapter at the start of the block.

ExerciseTaskFinding
I-M7.AHandshakes: find recent handshakes to an unknown external SNI. Note source, destination, SNI, JA3, fingerprint verdict. Measure the interval (appendix A.3). Standard/full: check the client for other traffic; write two or three sentences for a colleagueF10
I-M7.B (standard, full)Ask the Chat what the beacon means and what the SOC does now, with your own values; note the two most useful recommendationsF10

I-M9 — Beyond TLS

11:05 · 35 min

ExerciseTaskFinding
I-M9.1IKE and OpenVPN traffic of vpn.payments.isla.test (appendix A.4): weak or insecure per parameter, and whyF05, F06
I-M9.2SSH traffic to hsm.payments.isla.test (appendix A.5): weak kex, cipher, MAC, HASSH. Why is diffie-hellman-group1-sha1 weak twice?F07

I-M10 — Operationalise

11:40 · 45 min

ExerciseTaskFinding
I-M10.ABuild a view of Isla certificates expiring within 60 days (appendix A.6), save as <your login> — isla-expiry-60d. Can your neighbour see it?F03
I-M10.BWith the notifyd config from the block: which certificates alert at 30 and 60 days, who receives it, how fast the malware alert fires after the beacon; write a renewal-plan promptF03, F10

I-M8 — Quantum & CBOM

13:10 · 50 min

ExerciseTaskFinding
I-M8.1CBOM page: quantumVulnerable, quantumSafeCount, readiness ratio, two weak algorithms, protocol versions, any hybrid KEX, first host to migrateF01, F02, F05, F07, F08, F14
I-M8.2 (full)Ask the Chat for a PQC migration order for Isla, with data horizon and HNDL; then the three actions with most risk reduction per hourF14

The hook to A1 (crypto agility) follows this block in some tracks.

K-1 — Outside-in with Kartis

14:00 · 45 min

ExerciseTaskFinding
K-1.1Log in to Center, switch to EN, start a discovery for isla.edu.eoncore.net on Scorecard; after 30 s note the scorecard countersF03, F04, F08
K-1.2Certificates: which host expires first, issuer, days left, scorecard bucket, owning teamF03
K-1.3DNS / Email for isla.edu.eoncore.net: map every SPF include and DKIM selector to a party; compare with the brief; is spoofing covered?F11, F12
K-1.4Technology: CDN and cloud provider per vhost; in the brief? What does a CDN in front of www mean for TLS keys?—
K-1.5 (full)Hosts shows intranet on TLS 1.0. Check live (appendix B.1b, B.2), label false_positive with a note, compare Scorecard, remove the label againF03, F04
K-1.6 (full)Upload register.xlsx in Central register, run Crypto posture, filter Findings on drift: which finding concerns pay?F02

K-2 — Is the C2 ours?

15:00 · 35 min

ExerciseTaskFinding
K-2.1Look up the C2 domain and IP from I-M7 in Hosts, Domains, Certificates, DNS / Email and the Scorecard apex list. Part of Isla's perimeter? What do you ask the client?F10
K-2.2Central register → Generate draft, run Crypto posture, Findings with verdict rogue: name, issuer, since when, action, ownerF09
K-2.3In pairs, one line each for F10 and F09: whose asset, response owner, first three actions, message to the CISOF09, F10

I-M11 — Capstone (inside + outside)

09:00 · 50 min

The trainer plays the capstone chapter (and beacon if not played earlier). Per team, for your own app:

StepTask
1 InsideInsights: filter Hosts on your app: tag, open the weakest host; check Compliance and the Chat for non-TLS traffic
2 OutsideCenter Kartis pages: hosts, certificates, DNS / Email, posture (upload register.xlsx, run posture, read shadow / rogue / drift)
3 MatchPut each finding in one column: inside only, outside only, both
4 VerifyCheck every outside finding you report against the live server or the inside data
5 Tag and viewTag the hosts you report; save a view of your app ordered by level, named <team> — capstone
6 Readout3 minutes, template in appendix C.1

Expected: one inside-only, one outside-only and one both finding per app, plus the weakest link.


C0 — Engagement kickoff

10:05 · 15 min

ExerciseTaskFinding
C0.1Read the client brief in pairs: the two engagement questions, one judging criterion per stakeholder, two statements you would not accept without evidenceF08, F11
C0.2Log in to Center, open Isla Mercantile Group (team-NN), copy its customer ID, set journey milestone "Maturity intake (CMB)" to In progress with a note—

C1 — The consultancy craft

10:20 · 45 min

ExerciseTaskFinding
C1.1Definition of done for D1 and D5 (standard/full: D1, D2, D5): who accepts, what it contains, what not; add as journey notes—
C1.2 (standard, full)Four claims from the brief: claim type, the evidence that settles it, the block that produces itF01, F02, F03, F08, F11
C1.3 (full)One-page scope in pairs, with indicative hours per stage, bottom-up; compare totals—

C2 — Maturity quick-scan (CMB)

11:05 · 30 min

ExerciseTaskFinding
C2.1From the brief alone: which two CMB categories lowest, which one highest?—
C2.2/cmb/results → Isla — CMB self-assessment: overall score, band, three lowest and two highest categories; who does the work behind the highest—
C2.3Two answers to treat as claims to verify, one answer whose score misrepresents Isla; which block produces the evidenceF01, F02, F08
C2.4 (full)Three sentences the CISO can repeat to the board, no percentages below category level, no technology names—

C3 — Baseline assessment (CBA)

11:35 · 70 min

ExerciseTaskFinding
C3.1Interview the CISO (trainer). Short: the 10 marked questions; full: all 36, your pair's subcategories. Write her answers in her words; probe at least three—
C3.2Set a maturity level per question with a one-line reason; create assessment Isla — PQC baseline for team-NN and import the workbook—
C3.3Run the AI assessor on question 17 (full: also 33); compare its level with yours, edit, decide on ApproveF03
C3.4Gap table per subcategory: current level, 12-month target, gap, driver (DORA / NIS2 article or PQC exposure)F14
C3.5 (full)Mark each AI advice recommendation as supported (name the question) or generic; which one do you drop?—

C4 — Inventory intake

13:30 · 45 min

ExerciseTaskFinding
C4.1Review ckm-intake.xlsx without Center: row, issue, proposed action, who at Isla answers; note what is already a findingF03, F08
C4.2Create Inventory design Isla CKM intake, upload the workbook, read the consolidation report: components per layer vs rows vs distinct systems—
C4.3Central registry: two entries (full: four) for assets that need an owner or a decision; owner unknown → unknown — ask <name>F02, F03, F07
C4.4 (full)Estimate the hours to turn the intake into D3, bottom-up per issue type; scale to 30 times the systems—

C5 — Outside-in view: register versus reality

14:30 · 50 min

ExerciseTaskFinding
C5.1 (full)Upload register-flawed.xlsx: which rows are rejected and why, is the rest accepted? Fix it—
C5.2Start a discovery for isla.edu.eoncore.net if needed, upload register.xlsx, compare registered hosts with Hosts: which external host is missing?F08
C5.3Run Crypto posture; list every finding with verdict, severity, subject, evidence; which one not to report yet?F02, F03, F04, F08, F09
C5.4 (standard, full)Set a status per finding, name the owner at Isla and the next action; unverified stays open with a noteF02, F03, F04, F08, F09

C6 — Verify in the field

09:00 · 35 min

ExerciseTaskFinding
C6.13DES check against pay (appendix B.1): protocol and cipher; does it confirm the Kartis drift? Which Insights finding matches?F02
C6.2TLS 1.0 and 1.2 against intranet (appendix B.2), with the TLS 1.0 control on pay (B.1b); what does the server say, what was the scan date?F03, F04
C6.3Set the intranet weak_tls_version finding to false_positive (leave cert_expiring open); add a Labels note (scan date, check, result, initials); leave pay openF04
C6.4 (standard, full)Two evidence-log lines: command, date and time, result, confirmed / refutedF02, F04
C6.5 (full)testssl.sh -p -W against pay, -p against intranet: does the second tool agree, what does it add?F02, F04
C6.6 (full)After C6.3, open Scorecard and Certificates: what else disappeared? Where must F03 be recorded?F03, F04

C9 — Supplier crypto risk (TPRM)

09:35 · 40 min

ExerciseTaskFinding
C9.1DNS / Email and Technology: list every third party (SPF, DKIM, mail provider, CDN, cloud), match to the brief; who handles Isla data or keys and is missing?F11
C9.2Decision tree for the five suppliers in the brief plus the one you found: crypto role, tier, one-line reason (five minutes)F11
C9.3Per team one supplier (PayCarib, IdentiQ or Mailfuel): five questions before renewal (key custody, evidence, rotation, incidents, migration and exit) and the two clauses you would not sign without—
C9.4 (full)PayCarib refuses the agility clause T1.5.1. In pairs: what Isla loses, what it can accept instead, who decides—

C7 — Design & policy

10:30 · 40 min

ExerciseTaskFinding
C7.1Generate a Cryptography Baseline in Polgen for Isla (template Financieel EU, sector financial, English, NIS2 / DORA / ISO 27001 / NIST, Enterprise); download as Markdown—
C7.2Per gap from C3: the clause that covers it or "not covered"; then two clauses that answer no Isla gapF01, F02, F03, F07, F08, F11, F14
C7.3 (full)One requirement where Isla must choose its risk appetite, written as a decision: options, consequences, recommendationF14

A1 — Crypto agility

11:10 · 10 min

No exercise. Discussion question: NIST deprecates an algorithm Isla uses for card payments. Who at Isla knows how long replacing it takes, and where is that written down?


X1 — Inside-out meets outside-in

11:20 · 30 min

ExerciseTaskFinding
X1.1Fill the matrix (appendix C.2): for F01–F14 mark Insights / Kartis / live and classify inside only, outside only or both. Check at least two cells liveF01–F14
X1.2Add the unregistered asset to register.xlsx, upload, rerun posture. What happens to the finding? Which inside-only assets belong in the internal register?F08

C8 — Report & readout

11:50 · 50 min

ExerciseTaskFinding
C8.1Generate the Kartis management report: which of F02, F03, F08, F09, F11, F12 appear, in which counter, which is missing and why?F02, F03, F08, F09, F11, F12
C8.2 (standard, full)Top five actions in the remediation tracker: title, domain, owner at Isla, priority, deadline—
C8.3One page per group: where we stand (Q1, Q2), what it costs (hours), what first (three actions, owner, date); read out to the CISO—
C8.4 (full)Export the CMB Full Report, open /cba/reports, optionally generate the improvement plan; decide annex, main report or not at all—

Queries, live checks and templates

Queries

Run these through the Insights Chat. The Chat only accepts SELECT/WITH and rejects any query containing words such as INSERT, UPDATE, DELETE, ALTER, CREATE, REPLACE, SET anywhere in the text.

A.1 Chain view (I-TAG.2, I-M11)

Replace app:webshop with your app.

SELECT
    hostname,
    toString(any(ipv4))                                  AS ip,
    arrayDistinct(groupArrayArray(tags))                 AS all_tags,
    arrayFirst(t -> startsWith(t, 'tier:'),  all_tags)   AS tier,
    arrayFirst(t -> startsWith(t, 'owner:'), all_tags)   AS owner,
    anyLast(security_level)                              AS level,
    multiIf(level = 'insecure', 1, level = 'weak', 2,
            level = 'secure', 3, level = 'recommended', 4, 5) AS ladder_rank
FROM hosts
GROUP BY hostname
HAVING has(all_tags, 'app:webshop')
ORDER BY ladder_rank, tier

A.2 Negotiated suites per Isla host (I-M6.C)

SELECT h.dst_ip, h.sni, h.tls_version, c.name AS cipher, c.security, count() AS n
FROM tls_hellos AS h
LEFT JOIN ciphersuites AS c ON c.hex = h.negotiated_cipher
WHERE h.dst_ip LIKE '10.20.%'
GROUP BY h.dst_ip, h.sni, h.tls_version, cipher, c.security
ORDER BY h.dst_ip

tls_version is the wire value: 769 = TLS 1.0, 770 = TLS 1.1, 771 = TLS 1.2, 772 = TLS 1.3.

A.3 Beacon interval (I-M7.A)

SELECT src_ip, dst_ip, sni, ja3, count() AS beacons,
       arrayDifference(arraySort(groupArray(toUnixTimestamp(timestamp)))) AS intervals_s
FROM tls_hellos
WHERE sni = 'cdn-update-check.net'
GROUP BY src_ip, dst_ip, sni, ja3

A.4 IKE and OpenVPN of vpn.payments (I-M9.1)

SELECT src_ip, dst_ip, ike_version, exchange_type_name, dh_groups,
       encryption_algs, integrity_algs, vendor_ids,
       has_weak_dh, has_weak_encryption, has_weak_integrity
FROM ipsec_connections
WHERE '10.20.3.11' IN (src_ip, dst_ip)
ORDER BY timestamp DESC
LIMIT 10
SELECT src_ip, dst_ip, dst_port, vpn_type, openvpn_version, tls_auth_enabled
FROM vpn_connections
WHERE '10.20.3.11' IN (src_ip, dst_ip)
LIMIT 10

A.5 SSH to hsm.payments (I-M9.2)

SELECT src_ip, dst_ip, client_version, server_version, hassh, hassh_server,
       kex_algorithms, encryption_algorithms, mac_algorithms,
       has_weak_kex, has_weak_cipher, has_weak_mac
FROM ssh_connections
WHERE dst_ip = '10.20.3.12'
LIMIT 10

A.6 Certificates expiring within 60 days (I-M10.A)

SELECT subject, issuer, valid_to, dateDiff('day', now(), valid_to) AS days_left
FROM certificates FINAL
WHERE valid_to < now() + INTERVAL 60 DAY
ORDER BY valid_to

Live checks

Against the Isla public sites. Always pass -servername: web-b routes by SNI, and a client without SNI lands on pay. OpenSSL 3 needs @SECLEVEL=0 in the cipher string for 3DES and TLS 1.0; drop :@SECLEVEL=0 on LibreSSL (openssl version tells you which one you have). Some Linux distributions block TLS 1.0 in the system crypto policy even with @SECLEVEL=0; B.1b shows whether yours does. If it does, use testssl.sh or pair with someone whose client can.

B.1 3DES on pay (I-M2.3, K-1.6, C6.1)

openssl s_client -connect pay.isla.edu.eoncore.net:443 -servername pay.isla.edu.eoncore.net \
  -tls1_2 -cipher 'DES-CBC3-SHA:@SECLEVEL=0' </dev/null

B.1b Control: can your client speak TLS 1.0? (C6.2, K-1.5, I-M11)

openssl s_client -connect pay.isla.edu.eoncore.net:443 -servername pay.isla.edu.eoncore.net \
  -tls1 -cipher 'DEFAULT:@SECLEVEL=0' </dev/null

Handshake succeeds: your client can test TLS 1.0. no protocols available or a failure before any server answer: your client refuses TLS 1.0, and B.2 proves nothing.

B.2 TLS versions on intranet (K-1.5, C6.2, I-M11)

openssl s_client -connect intranet.isla.edu.eoncore.net:443 -servername intranet.isla.edu.eoncore.net -tls1 -cipher 'DEFAULT:@SECLEVEL=0' </dev/null
openssl s_client -connect intranet.isla.edu.eoncore.net:443 -servername intranet.isla.edu.eoncore.net -tls1_2 </dev/null

B.3 Certificate expiry (I-M11, C6)

openssl s_client -connect intranet.isla.edu.eoncore.net:443 -servername intranet.isla.edu.eoncore.net </dev/null \
  | openssl x509 -noout -enddate

Record every check you use as evidence: date, command, result.

Templates

C.1 Capstone readout (I-M11)

Team <app> — 3 minutes
1. Inside only:   <host / value> — why it is not visible outside — owner — fix — deadline
2. Outside only:  <what / page>  — why Insights cannot see it  — owner — fix — deadline
3. Both:          <finding>      — inside shows … / outside shows … — agree? — fix — deadline
4. Weakest link of our app and the first action for Monday

C.2 Inside/outside matrix (X1.1)

IDFindingInsightsKartisLive web-a/web-bClass
F01
F02
F03
F04
F05
F06
F07
F08
F09
F10
F11
F12
F13
F14