T-IK-half-A — Insights + Kartis, ½ day: find the weak link

Lab guide · Isla Mercantile Group · 195m net (09:00–12:30)

Schedule

TimeBlockMinutes
09:00I-M0 — Welcome & client brief15
09:15I-M1 — Crypto 10120
09:35I-M2 — How Insights sees (live)25
10:00I-M3 — Dashboard tour40
10:40Break15
10:55I-TAG — Tag teams: build the chain45
11:40K-1 — Outside-in with Kartis30
12:10Wrap-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 · 20 min

ExerciseTaskFinding

I-M2 — How Insights sees (live)

09:35 · 25 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-M3 — Dashboard tour

10:00 · 40 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

10:55 · 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

11:40 · 30 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?—

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

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