skip to content

An implant reused a connection-scoped grant to an internal console: with only flow records and the broker's session log, what can you show it carried?

level: seniorimportance: nice to knowfreq 35%

answer

  1. Ask what each record proves, separately
  2. Flow records carry counts, never payload
  3. A grant proves policy passed, not presence
  4. No parse means no per-request record
  5. Not a retention gap; a scope consequence

basics

~20 s

Almost nothing about content. Flow records prove bytes moved between two endpoints, with counts, timestamps and no payload; the broker's log proves a grant was issued and a pipe existed. Neither shows which records or exports the session carried.

solid answer

~50 s

Separate what each record proves. A flow record carries a five-tuple, packet and byte counts and start and end times — it establishes that traffic moved to the console host, in what volume and for how long, and it carries no payload at all. The broker's session log establishes that a grant was issued to a named identity on a named device, to that destination, at that time. Put together you can say a pipe existed and roughly 350 MB came back down it over two hours. You cannot say which records were read or whether an export ran, because nothing in the path ever parsed a request. That granularity is a property of the unit of decision, not of your log retention: if you never decided per request, no per-request record exists to go and find. The remaining evidence is the application's own log, if it has one and if the identity survived to it.

code

text · 14 lines
text
flow record (one direction, IPFIX-style fields)
  srcaddr=10.8.1.30  dstaddr=10.42.7.19
  srcport=443        dstport=51544   protocol=6
  packets=214880     bytes=352481102
  start=13:02:11     end=15:07:44
  -> proves: ~352 MB returned from the console host over 2h05
  -> no payload field exists here, at all

broker session log (connection-scoped grant)
  identity=... device=... destination=console.internal:443
  decision=allow  opened=13:02:10  closed=15:07:45
  -> proves: a grant was issued and a pipe existed
  -> no per-request line, because nothing parsed requests
  ...

go deeper

for a junior

Know that a flow record has counts and timestamps but no payload, so it can show that traffic moved and never what it contained.

for a middle

Explain why the broker's session log and a flow record together still leave content unknown, and where per-request records would otherwise come from.

for a senior

Show you can scope an incident from weak artefacts, state the uncertainty explicitly, and trace the blind spot back to the grant's scope rather than to logging.

for a principal

Own the argument that evidence granularity is bought at the same moment as enforcement granularity, and that accepting coarse grants accepts unbounded incidents on those paths.

## Read the records for what they each prove This question is really about the direction of claims, and it is where careful candidates separate themselves. **A flow record** — whatever the exporter — carries the five-tuple (source and destination address, source and destination port, protocol), packet and byte counts, and start and end timestamps. It proves that **bytes moved**, between which endpoints, in which direction, in what volume, over what interval. It carries **no payload**. It cannot tell you what an HTTP request asked for, and it cannot tell you whether the traffic was one export or ten thousand page views. **The broker's session log** proves that a **grant was issued**: this identity, on this device, in this posture, was allowed to open a session to this destination at this time, and the session lasted this long. It proves a credential and a device passed policy at that instant. It does not prove a human was at the keyboard, and it does not describe the session's contents. So after a connection-scoped grant to an internal console, the defensible statements are: a session existed between 13:02 and 15:07; it was authorised to a named identity and device; roughly 350 MB returned from the console host; the volume is far above that identity's normal daily console traffic. The statements you cannot make: which resources were opened, whether an export was run, whether anything was modified. ## Why you cannot fix this after the fact The usual instinct is to treat this as a logging gap and ask for more retention or another collector. It is not a retention problem. **Evidence granularity is a property of the unit of decision.** Per-request records come from something that reconstructed requests in order to decide about them. If nothing parsed requests, no per-request record was ever created, and no amount of retention recovers a record that was never written. That is the second half of the price this topic is about. A connection-scoped grant saves a parse and a policy evaluation on every request, and it buys you an incident you cannot bound. ## What is still worth doing - **Go to the application's own log.** An internal console usually records its own requests. The catch is identity: if the connector relayed traffic to the console and the console authenticated the user itself, you have per-request records with a user on them. If the console sits behind a shared service account or trusts the network, its log will show the connector and every session collapses into one actor. - **Bound the incident with volume and timing.** Compare the session's byte counts against that identity's baseline and against the size of plausible data sets. "350 MB returned" is weak evidence of content and strong evidence of scale, and scale is often what a notification decision turns on. - **Establish reachability, not just this session.** What else was inside that grant's destination scope? If the grant named one host and port, your uncertainty is bounded by that host; if it named a range, it is not. - **State the uncertainty explicitly.** "We cannot determine which records were viewed" is a finding. Writing it down is what forces the decision about whether the unit of decision changes for that application. ## Claims to refuse, out loud - **"The flow record shows they exfiltrated data."** It shows bytes moved outbound from the console to the client. Whether that was a bulk export or ordinary browsing is not in the record. - **"The session was authorised, so this was legitimate use."** Authorisation proves the credential and the device passed at setup. The whole premise here is that the process using the session was not the user. - **"There is no evidence of malicious requests."** There is no evidence of requests. Absence of a record from a source that never recorded requests is not evidence of absence. ## The point to land The interviewer wants to hear that you know what each artefact proves and that you attribute the blind spot to the right cause. The blind spot came from the scope of the grant. If the same session had been request-scoped, the connector's decision log would name each resource — which is exactly the record the application team's latency argument traded away.

  • The application's own log shows every request but attributes them all to one service account. What happened?
    The end-user identity did not survive to the application: the connector authenticated the user and then spoke to the console with its own credential, or the console trusted the network position instead of authenticating. Its log is then a record of the connector's traffic, and every session through it collapses into a single actor — useless for attribution even though it is per-request.
  • What can you say about scale from flow records alone, and how would you use it?
    Direction and volume: how many bytes returned from the workload to the client, over what interval, against that identity's normal profile and against the size of the data behind the console. That supports statements about plausible worst case and often drives notification decisions, while remaining silent about content. Say both halves when you report it.
  • How would you argue for changing the grant's scope on this application after the incident?
    Show the specific statement you could not make and what it cost — the hours spent reconstructing, the uncertainty carried into the report, the worst case you had to assume. Then price the alternative honestly: a parse and evaluation per request on that path, and rules someone maintains. The argument lands because the missing record, not the missing prevention, is what hurt.

saying these in an interview costs you the question

  • Reads exfiltration out of a flow record's byte counts
  • Calls the missing detail a log retention problem
  • Treats an authorised session as proof the user acted
  • Says no malicious requests were recorded, so none happened

context