Question 16

Using the runtime detection tool Falco, Analyse the container behavior for at least 30 seconds, using filters that detect newly spawning and executing processes
  • Question 17

    SIMULATION
    Create a RuntimeClass named gvisor-rc using the prepared runtime handler named runsc.
    Create a Pods of image Nginx in the Namespace server to run on the gVisor runtime class

    Question 18

    On the Cluster worker node, enforce the prepared AppArmor profile
    #include <tunables/global>
    profile docker-nginx flags=(attach_disconnected,mediate_deleted) {
    #include <abstractions/base>
    network inet tcp,
    network inet udp,
    network inet icmp,
    deny network raw,
    deny network packet,
    file,
    umount,
    deny /bin/** wl,
    deny /boot/** wl,
    deny /dev/** wl,
    deny /etc/** wl,
    deny /home/** wl,
    deny /lib/** wl,
    deny /lib64/** wl,
    deny /media/** wl,
    deny /mnt/** wl,
    deny /opt/** wl,
    deny /proc/** wl,
    deny /root/** wl,
    deny /sbin/** wl,
    deny /srv/** wl,
    deny /tmp/** wl,
    deny /sys/** wl,
    deny /usr/** wl,
    audit /** w,
    /var/run/nginx.pid w,
    /usr/sbin/nginx ix,
    deny /bin/dash mrwklx,
    deny /bin/sh mrwklx,
    deny /usr/bin/top mrwklx,
    capability chown,
    capability dac_override,
    capability setuid,
    capability setgid,
    capability net_bind_service,
    deny @{PROC}/* w, # deny write for all files directly in /proc (not in a subdir)
    # deny write to files not in /proc/<number>/** or /proc/sys/**
    deny @{PROC}/{[^1-9],[^1-9][^0-9],[^1-9s][^0-9y][^0-9s],[^1-9][^0-9][^0-9][^0-9]*}/** w, deny @{PROC}/sys/[^k]** w, # deny /proc/sys except /proc/sys/k* (effectively /proc/sys/kernel) deny @{PROC}/sys/kernel/{?,??,[^s][^h][^m]**} w, # deny everything except shm* in /proc/sys/kernel/ deny @{PROC}/sysrq-trigger rwklx, deny @{PROC}/mem rwklx, deny @{PROC}/kmem rwklx, deny @{PROC}/kcore rwklx, deny mount, deny /sys/[^f]*/** wklx, deny /sys/f[^s]*/** wklx, deny /sys/fs/[^c]*/** wklx, deny /sys/fs/c[^g]*/** wklx, deny /sys/fs/cg[^r]*/** wklx, deny /sys/firmware/** rwklx, deny /sys/kernel/security/** rwklx,
    }
    Edit the prepared manifest file to include the AppArmor profile.
    apiVersion: v1
    kind: Pod
    metadata:
    name: apparmor-pod
    spec:
    containers:
    - name: apparmor-pod
    image: nginx
    Finally, apply the manifests files and create the Pod specified on it.
    Verify: Try to use command ping, top, sh
  • Question 19

    Enable audit logs in the cluster, To Do so, enable the log backend, and ensure that
    1. logs are stored at /var/log/kubernetes-logs.txt.
    2. Log files are retained for 12 days.
    3. at maximum, a number of 8 old audit logs files are retained.
    4. set the maximum size before getting rotated to 200MB
    Edit and extend the basic policy to log:
    1. namespaces changes at RequestResponse
    2. Log the request body of secrets changes in the namespace kube-system.
    3. Log all other resources in core and extensions at the Request level.
    4. Log "pods/portforward", "services/proxy" at Metadata level.
    5. Omit the Stage RequestReceived
    All other requests at the Metadata level

    Question 20

    SIMULATION
    Given an existing Pod named nginx-pod running in the namespace test-system, fetch the service-account-name used and put the content in /candidate/KSC00124.txt Create a new Role named dev-test-role in the namespace test-system, which can perform update operations, on resources of type namespaces.
    Create a new RoleBinding named dev-test-role-binding, which binds the newly created Role to the Pod's ServiceAccount ( found in the Nginx pod running in namespace test-system).