T-IK-1 — Insights + Kartis, 1 day
Lab guide · Isla Mercantile Group · 380m net (09:00–16:30)
Schedule
| Time | Block | Minutes |
|---|---|---|
| 09:00 | I-M0 — Welcome & client brief | 15 |
| 09:15 | I-M1 — Crypto 101 | 45 |
| 10:00 | I-M2 — How Insights sees (live) | 30 |
| 10:30 | Break | 15 |
| 10:45 | I-M3 — Dashboard tour | 60 |
| 11:45 | I-TAG — Tag teams: build the chain | 45 |
| 12:30 | Lunch | 45 |
| 13:15 | K-1 — Outside-in with Kartis | 45 |
| 14:00 | I-M7 — Threat on the wire | 35 |
| 14:35 | Break | 10 |
| 14:45 | I-M8 — Quantum & CBOM | 35 |
| 15:20 | A1 — Crypto agility | 10 |
| 15:30 | I-M11 — Capstone (inside + outside) | 50 |
| 16:20 | Quiz | 10 |
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.
| System | Address | Login | Used in |
|---|---|---|---|
| Eon Insights | https://insights.edu.eoncore.net | traineeNN | I-blocks, I-TAG, X1 |
| Eon Center | https://center.edu.eoncore.net | traineeNN (org_admin of team-NN) | C-blocks, K-blocks, X1 |
| Center, Kartis pages only | https://center.edu.eoncore.net | kNN (kartis_only) | K-blocks in the Insights + Kartis tracks |
| Isla public sites | https://<vhost>.isla.edu.eoncore.net | none | I-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
- One Insights for the whole group. Tags are shared: every team sees the others' tags appear.
- Custom views are shared: every view you save is in everyone's list. Prefix the name with your team or login (
webshop — chain); do not change or delete a view you did not create. - There is no personal reset. Do not delete data, uploads or tags you did not create.
- Tag rule: tag only hosts of your own app, one person per host, never remove tags you did not set. Full convention: Tag convention.
- Center and the Kartis pages keep state per team customer: register upload, posture runs, finding status and labels are shared by
traineeNNandkNNof the same team, and invisible to other teams. - Traffic replays (probe chapters) are started by the trainer. You need no shell on the server.
- AI: the Insights Chat is available in the Insights blocks. The Kartis pages have no AI.
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 hosts | Subnet | Public vhosts |
|---|---|---|---|
| webshop | shop, api, db, pay .webshop.isla.test | 10.20.1.0/24 | www, shop, api, pay |
| intranet | sso, portal, cache .intranet.isla.test | 10.20.2.0/24 | intranet |
| payments | gw, vpn, hsm .payments.isla.test | 10.20.3.0/24 | none |
| loyalty | app, api, old .loyalty.isla.test | 10.20.4.0/24 | loyalty, 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
| Exercise | Task | Finding |
|---|---|---|
| I-M0.1 | Log 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
| Exercise | Task | Finding |
|---|---|---|
| I-M1.1 | Classify ten algorithms and suites as insecure, weak, secure or recommended, one sentence each (standard: items 1, 2, 5, 6, 10) | F01, F02, F08 |
I-M2 — How Insights sees (live)
| Exercise | Task | Finding |
|---|---|---|
| I-M2.1 | Note 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, JA3 | F02 |
| I-M2.2 | Compare your JA3 with a neighbour on the same browser and one on another browser | — |
I-M3 — Dashboard tour
| Exercise | Task | Finding |
|---|---|---|
| I-M3.1 | Hosts: filter insecure + weak, search isla.test, last 7 days. List host and level | F01, F02, F05, F07, F08, F13 |
| I-M3.2 | HostDetails db.webshop.isla.test: worst TLS version, insecure suite, cert key. Why insecure, not weak? | F01 |
| I-M3.3 | Certificates, sort Valid until ascending: first Isla certificate, days left, host | F03 |
I-TAG — Tag teams: build the chain
| Exercise | Task | Finding |
|---|---|---|
| I-TAG.1 | Find every host of your app; split the list; tag each with app:, tier:, env:, owner: via HostTagsEdit | — |
| I-TAG.2 | Build the chain view through the Chat (appendix A.1), fix missing tags, Save as View, note the view id | — |
| I-TAG.3 | One minute per team: weakest link, finding, owner, why | F01, F03, F05, F08 |
K-1 — Outside-in with Kartis
| Exercise | Task | Finding |
|---|---|---|
| K-1.1 | Log in to Center, switch to EN, start a discovery for isla.edu.eoncore.net on Scorecard; after 30 s note the scorecard counters | F03, F04, F08 |
| K-1.2 | Certificates: which host expires first, issuer, days left, scorecard bucket, owning team | F03 |
| K-1.3 | DNS / 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.4 | Technology: 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 again | F03, F04 |
| K-1.6 (full) | Upload register.xlsx in Central register, run Crypto posture, filter Findings on drift: which finding concerns pay? | F02 |
I-M7 — Threat on the wire
The trainer plays the beacon chapter at the start of the block.
| Exercise | Task | Finding |
|---|---|---|
| I-M7.A | Handshakes: 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 colleague | F10 |
| 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 recommendations | F10 |
I-M8 — Quantum & CBOM
| Exercise | Task | Finding |
|---|---|---|
| I-M8.1 | CBOM page: quantumVulnerable, quantumSafeCount, readiness ratio, two weak algorithms, protocol versions, any hybrid KEX, first host to migrate | F01, F02, F05, F07, F08, F14 |
The hook to A1 (crypto agility) follows this block in some tracks.
A1 — Crypto agility
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?
I-M11 — Capstone (inside + outside)
The trainer plays the capstone chapter (and beacon if not played earlier). Per team, for your own app:
| Step | Task |
|---|---|
| 1 Inside | Insights: filter Hosts on your app: tag, open the weakest host; check Compliance and the Chat for non-TLS traffic |
| 2 Outside | Center Kartis pages: hosts, certificates, DNS / Email, posture (upload register.xlsx, run posture, read shadow / rogue / drift) |
| 3 Match | Put each finding in one column: inside only, outside only, both |
| 4 Verify | Check every outside finding you report against the live server or the inside data |
| 5 Tag and view | Tag the hosts you report; save a view of your app ordered by level, named <team> — capstone |
| 6 Readout | 3 minutes, template in appendix C.1 |
Expected: one inside-only, one outside-only and one both finding per app, plus the weakest link.
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, tierA.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, ja3Live 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/nullB.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/nullHandshake 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/nullB.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 -enddateRecord 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