T-IK-1 — Insights + Kartis, 1 day

Lab guide · Isla Mercantile Group · 380m net (09:00–16:30)

Schedule

TimeBlockMinutes
09:00I-M0 — Welcome & client brief15
09:15I-M1 — Crypto 10145
10:00I-M2 — How Insights sees (live)30
10:30Break15
10:45I-M3 — Dashboard tour60
11:45I-TAG — Tag teams: build the chain45
12:30Lunch45
13:15K-1 — Outside-in with Kartis45
14:00I-M7 — Threat on the wire35
14:35Break10
14:45I-M8 — Quantum & CBOM35
15:20A1 — Crypto agility10
15:30I-M11 — Capstone (inside + outside)50
16:20Quiz10

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 · 45 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-M2 — How Insights sees (live)

10:00 · 30 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-M3 — Dashboard tour

10:45 · 60 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-TAG — Tag teams: build the chain

11:45 · 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

K-1 — Outside-in with Kartis

13:15 · 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

I-M7 — Threat on the wire

14:00 · 35 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-M8 — Quantum & CBOM

14:45 · 35 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

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

A1 — Crypto agility

15:20 · 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?


I-M11 — Capstone (inside + outside)

15:30 · 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.


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.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

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