AWS Signer is a fully managed code-signing service to help ensure the trust and integrity of your code. It helps you verify that the code comes from a trusted source and that an unauthorized party has not accessed it. AWS Signer manages code signing certificates and public and private keys, which can reduce the overhead of your public key infrastructure (PKI) management. It also provides a set of features to simplify lifecycle management of your keys and certificates so that you can focus on signing and verifying your code.
Containers and AWS Lambda functions are popular serverless compute solutions for applications built on the cloud. By using AWS Signer, you can verify that the software running in these workloads originates from a trusted source.
In this blog post, you will learn about the benefits of code signing for software security, governance, and compliance needs. Flexible continuous integration and continuous delivery (CI/CD) integration, management of signing identities, and native integration with other AWS services can help you simplify code security through automation.
Background
Code signing is an important part of the software supply chain. It helps ensure that the code is unaltered and comes from an approved source.
To automate software development workflows, organizations often implement a CI/CD pipeline to push, test, and deploy code effectively. You can integrate code signing into the workflow to help prevent untrusted code from being deployed, as shown in Figure 1. Code signing in the pipeline can provide you with different types of information, depending on how you decide to use the functionality. For example, you can integrate code signing into the build stage to attest that the code was scanned for vulnerabilities, had its software bill of materials (SBOM) approved internally, and underwent unit and integration testing. You can also use code signing to verify who has pushed or published the code, such as a developer, team, or organization. You can verify each of these steps separately by including multiple signing stages in the pipeline. For more information on the value provided by container image signing, see Cryptographic Signing for Containers.
Figure 1: Security IN the pipeline
In the following section, we will walk you through a simple implementation of image signing and its verification for Amazon Elastic Kubernetes Service (Amazon EKS) deployment. The signature attests that the container image went through the pipeline and came from a trusted source. You can use this process in more complex scenarios by adding multiple AWS CodeBuild code signing stages that make use of various AWS Signer signing profiles.
Services and tools
In this section, we discuss the various AWS services and third-party tools that you need for this solution.
CI/CD services
For the CI/CD pipeline, you will use the following AWS services:
AWS CodePipeline — a fully managed continuous delivery service that you can use to automate your release pipelines for fast and reliable application and infrastructure updates.
AWS Signer — a fully managed code-signing service that you can use to help ensure the trust and integrity of your code.
AWS CodeBuild — A fully managed continuous integration service that compiles source code, runs tests, and produces software packages that are ready to deploy.
Container services
You will use the following AWS services for containers for this walkthrough:
Amazon EKS — a managed Kubernetes service to run Kubernetes in the AWS Cloud and on-premises data centers.
Amazon ECR — a fully managed container registry for high-performance hosting, so that you can reliably deploy application images and artifacts anywhere.
Verification tools
The following are publicly available sign verification tools that we integrated into the pipeline for this post, but you could integrate other tools that meet your specific requirements.
Notation — A publicly available Notary project within the Cloud Native Computing Foundation (CNCF). With contributions from AWS and others, Notary is an open standard and client implementation that allows for vendor-specific plugins for key management and other integrations. AWS Signer manages signing keys, key rotation, and PKI management for you, and is integrated with Notation through a curated plugin that provides a simple client-based workflow.
Kyverno — A publicly available policy engine that is designed for Kubernetes.
Solution overview
Figure 2: Solution architecture
Here’s how the solution works, as shown in Figure 2:
Developers push Dockerfiles and application code to CodeCommit. Each push to CodeCommit starts a pipeline hosted on CodePipeline.
CodeBuild packages the build, containerizes the application, and stores the image in the ECR registry.
CodeBuild retrieves a specific version of the image that was previously pushed to Amazon ECR. AWS Signer and Notation sign the image by using the signing profile established previously, as shown in more detail in Figure 3.
Figure 3: Signing images described
AWS Signer and Notation verify the signed image version and then deploy it to an Amazon EKS cluster.
If the image has not previously been signed correctly, the CodeBuild log displays an output similar to the following:
Error: signature verification failed: no signature is associated with "<AWS_ACCOUNT_ID>.dkr.ecr.<AWS_REGION>.amazonaws.com/hello-server@<DIGEST>" , make sure the artifact was signed successfully
If there is a signature mismatch, the CodeBuild log displays an output similar to the following:
Error: signature verification failed for all the signatures associated with <AWS_ACCOUNT_ID>.dkr.ecr.<AWS_REGION>.amazonaws.com/hello-server@<DIGEST>
Kyverno verifies the container image signature for use in the Amazon EKS cluster.
Figure 4 shows steps 4 and 5 in more detail.
Figure 4: Verification of image signature for Kubernetes
Prerequisites
Before getting started, make sure that you have the following prerequisites in place:
A CodePipeline pipeline deployed with the CodeCommit repository as the code source and four CodeBuild stages: Build, ApplicationSigning, ApplicationDeployment, and VerifyContainerSign. The CI/CD pipeline should look like that in Figure 5.
The commands in the buildspec.yaml configuration file do the following:
Sign you in to Amazon ECR to work with the Docker images.
Reference the specific image that will be signed by using the commit hash (or another versioning strategy that your organization uses). This gets the digest.
Sign the container image by using the notation sign command. This command uses the container image digest, instead of the image tag.
Install the Notation CLI. In this example, you use the installer for Linux. For a list of installers for various operating systems, see the AWS Signer Developer Guide,
Sign the image by using the notation sign command.
Inspect the signed image to make sure that it was signed successfully by using the notation inspect command.
To verify the signed image, use the notation verify command. The output should look similar to the following:
Successfully verified signature for <AWS_ACCOUNT_ID>.dkr.ecr.<AWS_REGION>.amazonaws.com/hello-server@<DIGEST>
(Optional) For troubleshooting, print the notation policy from the pipeline itself to check that it’s working as expected by running the notation policy show command:
notation policy show
For this, include the command in the pre_build phase after the notation version command in the buildspec.yaml configuration file.
After the notation policy show command runs, CodeBuild logs should display an output similar to the following:
To verify the image in Kubernetes, set up both Kyverno and the Kyverno-notation-AWS Signer in your EKS cluster. To get started with Kyverno and the Kyverno-notation-AWS Signer solution, see the installation instructions.
After you install Kyverno and Kyverno-notation-AWS Signer, verify that the controller is running—the STATUS should show Running:
$ kubectl get pods -n kyverno-notation-aws -w
NAME READY STATUS RESTARTS AGE
kyverno-notation-aws-75b7ddbcfc-kxwjh 1/1 Running 0 6h58m
Configure the CodeBuild buildspec.yaml configuration file to verify that the images deployed in the cluster have been previously signed. You can use the following code to configure the buildspec.yaml file.
The commands in the buildspec.yaml configuration file do the following:
Set up the environment variables, such as the ECR repository URI and the Commit hash, to build the image tag. The kubectl tool will use this later to reference the container image that will be deployed with the Kubernetes objects.
Use kubectl to connect to the EKS cluster and insert the container image reference in the deployment.yaml file.
After the container is deployed, you can observe the kyverno-notation-aws controller and access its logs. You can check if the deployed image is signed. If the logs contain an error, stop the pipeline run with an error code, do a rollback to a previous version, or delete the deployment if you detect that the image isn’t signed.
Decommission the AWS resources
If you no longer need the resources that you provisioned for this post, complete the following steps to delete them.
Delete the IAM roles and policies that you used for the configuration of IAM roles for service accounts.
Revoke the AWS Signer signing profile that you created and used for the signing process by running the following command in the AWS CLI:
$ aws signer revoke-signing-profile
Delete signatures from the Amazon ECR repository. Make sure to replace <AWS_ACCOUNT_ID> and <AWS_REGION> with your own information.
# Use oras CLI, with Amazon ECR Docker Credential Helper, to delete signature
$ oras manifest delete <AWS_ACCOUNT_ID>.dkr.ecr.<AWS_REGION>.amazonaws.com/pause@sha256:ca78e5f730f9a789ef8c63bb55275ac12dfb9e8099e6a0a64375d8a95ed501c4
Note: Using the ORAS project’s oras client, you can delete signatures and other reference type artifacts. It implements deletion by first removing the reference from an index, and then deleting the manifest.
Conclusion
In this post, you learned how to implement container image signing in a CI/CD pipeline by using AWS services such as CodePipeline, CodeBuild, Amazon ECR, and AWS Signer along with publicly available tools such as Notary and Kyverno. By implementing mandatory image signing in your pipelines, you can confirm that only validated and authorized container images are deployed to production. Automating the signing process and signature verification is vital to help securely deploy containers at scale. You also learned how to verify signed images both during deployment and at runtime in Kubernetes. This post provides valuable insights for anyone looking to add image signing capabilities to their CI/CD pipelines on AWS to provide supply chain security assurances. The combination of AWS managed services and publicly available tools provides a robust implementation.
If you have feedback about this post, submit comments in the Comments section below. If you have questions about this post, contact AWS Support.
Want more AWS Security news? Follow us on Twitter.
Version
4.6.0 of the darktable photo editor has been released. Changes include
a new “rgb primaries” module that “can be used for delicate color
corrections as well as creative color grading“, enhancements to the
sigmoid module, some performance improvements, and more. (LWN looked at darktable in 2022).
As if Metasploit couldn’t get any loonier, this release adds a brand new exploit module for Glibc Tunables Privilege Escalation aka Looney Tunables. Now, using linux/local/glibc_tunables_priv_esc, you can check your target’s glibc version to see if it’s vulnerable to buffer overflow, as outlined in CVE-2023-4911. If so, the module will drop a python script and escalate your privilege to the root user, allowing you to execute malicious code. Happy Tuning!
New module content (3)
Vinchin Backup and Recovery Command Injection
Authors: Gregory Boddin (LeakIX) and Valentin Lobstein
Type: Exploit
Pull request: #18542 contributed by Chocapikk
Path: linux/http/vinchin_backup_recovery_cmd_inject
Description: This adds an exploit module for a command injection vulnerability in Vinchin Backup & Recovery versions v5.0, v6.0, v6.7, and v7.0. This leverages two vulnerabilities identified as CVE-2023-45499 and CVE-2023-45498.
Authors: Qualys Threat Research Unit, blasty [email protected], and jheysel-r7
Type: Exploit
Pull request: #18541 contributed by jheysel-r7
Path: linux/local/glibc_tunables_priv_esc
Description: This adds an exploit module for the "Looney Tunables" Linux LPE, identified as CVE-2023-4911. It checks the version of glibc running on the target to make sure it is vulnerable and, once verified, it drops a python script that exploits the vulnerability and returns a session running in the context of the root user.
Atlassian Confluence Unauth JSON setup-restore Improper Authorization leading to RCE (CVE-2023-22518)
Description:
This adds an exploit module for CVE-2023-22518, an Improper Authorization vulnerability in Confluence which allows an attacker to upload and restore a .zip backup file to the server containing a known user name and password. The attacker can then login with the credentials from the backup file to gain administrative access to the server.
Enhancements and features (2)
#18622 from zeroSteiner – Updates the auxiliary/scanner/dcerpc/petitpotam module to work with newer Windows Server releases.
#18623 from gardnerapp – This updates the file handling of the generate command’s -o parameter to expand file system paths.
Bugs fixed (1)
#18619 from adfoster-r7 – Fixed a crash when running the favorites command.
Documentation added (1)
#18477 from AleksaZatezalo – This adds documentation for the auxiliary/scanner/nessus/nessus_rest_login module.
You can always find more documentation on our docsite at docs.metasploit.com.
Get it
As always, you can update to the latest Metasploit Framework with msfupdate
and you can get more details on the changes since the last blog post from
GitHub:
Many applications rely on user data to deliver useful features. For instance, browser telemetry can identify network errors or buggy websites by collecting and aggregating data from individuals. However, browsing history can be sensitive, and sharing this information opens the door to privacy risks. Interestingly, these applications are often not interested in individual data points (e.g. whether a particular user faced a network error while trying to access Wikipedia) but only care about aggregated data (e.g. the total number of users who had trouble connecting to Wikipedia).
DAP takes a significant step in the right direction, but private aggregation alone is often not sufficient to protect privacy. In this post, we explain the shortcomings of DAP, and how we can improve it by adding differential privacy.
The problem: private aggregation is not enough
DAP uses a cryptographic technique called multi-party computation. At a high-level, multi-party computation increases privacy by distributing the computation of the aggregate across multiple servers such that no server sees any individual’s data in the clear. (See our earlier blog post on DAP for a primer on multi-party computation.) At first, it may seem like this ought to be sufficient to protect the privacy of each individual user: the data collector learns only the information it needs (namely, the aggregate), and not the underlying data used to compute it. Unfortunately this is often not the case because the aggregate itself can sometimes reveal lots of private information.
8ft 11.1in (2.72m) tall Robert Wadlow posing for a family photograph, 1939. Credit: Paille // CC BY-SA 2.0.
As a trivial example, computing an average over a set of numbers with just one input in it reveals the value of the unique element in the set. But even learning the sum of some numbers can also reveal whether there is a particularly large or small number in the set. For example, suppose we’re computing the average height of a group of people. If a member of the group is particularly tall (as illustrated above), then knowing how many people are in the group and the expected average height, we can infer a significant amount of information about that individual’s height.
More generally, releasing too many accurate aggregates about a database can allow an attacker to reconstruct the whole database.
Such attacks exist in real life. For instance, deanonymization attacks against the U.S. Census have been credibly demonstrated. Large language models, such as ChatGPT, are also vulnerable; a machine learning model can be seen as a particular type of statistical aggregate computed over a training dataset. Here is an example of an attack, where researchers gave a special instruction to GPT-2 and extracted the name, address and phone number of a real individual whose data appeared only once in the training dataset:
One way of protecting the inputs to model training is a technique called federated learning, where the data are kept on end user devices and model updates are aggregated by a central server. (The aggregation step can even be done in DAP.) Yet even these systems are vulnerable to clever attacks that can leverage the final model, along with some intermediate versions, to reconstruct sensitive data.
We illustrate this idea in the figure below, which comes from a recent paper describing an attack on a machine learning model being trained for image classification. In this example we begin with 8 users, each of whom has one labeled image (e.g. an image of a cat that has been labeled “Cat”). These starting images are referred to as the Ground Truth. Each user runs their image through the image classification model to see if it can accurately label what is in the photograph. When the model misses, it generates a model update — a set of data that tells the model how to improve itself, so that it more reliably recognizes that user’s photo next time.
All eight users generate their own model update locally, and then federated learning is used to take the average of those model improvements, in a manner ostensibly designed to avoid any individual update or photograph from being extracted. However, researchers were able to exploit this approach.
The goal of the attack is to reconstruct the 8 Ground Truth images in the bottom row of the figure, with only access to the federated, average update. The attacker starts from a random guess (“Initial”), and progressively improves it by moving the guess in a direction that would give an update similar to the true average update. After enough iterations, we see that the images in the attacker’s guess (“Fully Leaked”) are close to the images in the true Ground Truth dataset, although the order can be different.
These attacks suggest that private aggregation (with DAP or by some other means) is not sufficient for privacy. Luckily there is a way forward: a variety of organizations, including Apple, and Google, the U.S. Census Bureau and a growing set of industry and government actors, now use differential privacy to protect their data.
Differential privacy
Differential privacy (DP) is a statistical framework that provides an extra layer of data protection for secure aggregation systems. It adds noise to aggregates, to prevent attackers from learning too much about any individual. Roughly speaking, the amount of randomness added is inversely proportional to a privacy parameter, typically denoted by the Greek letter 𝜖 (pronounced “epsilon”): a small 𝜖 is more private but has noisy results, while a large 𝜖 is less private but more accurate. In this way, 𝜖 rigorously quantifies the amount of information revealed by the aggregate.
To be fair, even without differential privacy, some deployments of computing statistics on sensitive datasets already provide guardrails against the most blatant privacy violations, by imposing certain restrictions. For instance, DAP has a mechanism for preventing the data collector from aggregating batches of inputs that are too small. In other settings, it’s possible to redact certain attributes when they do not appear often in the dataset, or to limit the number of times a data point can be aggregated. However, it is easy for such ad-hoc privacy protections to make assumptions about the data that turn out to be invalid.
First, these restrictions are essentially “patches” against some obvious attacks, but do not necessarily cover every possible attack. For instance, some aggregation tasks are particularly sensitive to outliers could still leak whether a particularly unusual measurement is part of the aggregation set. Moreover, while simple aggregates such as sums are easier to protect with handcrafted rules, multidimensional and structured statistics such as (averaged) neural network updates can leak a surprisingly large amount of information, as shown in the previous section. On the contrary, differential privacy is a general property that protects complex statistics even against adversaries we know nothing about.
Second, another benefit of differential privacy is that it harmonizes the security parameters across applications: the privacy guarantees are expressed as a particular value for 𝜖, that can be compared across use cases going from bit counts to federated learning. The value of 𝜖 can also be communicated publicly or discussed with DP experts. While setting 𝜖 is still a complicated matter (see below), it is at least less application-dependent than setting parameters such as the number of measurements to aggregate. In fact, thedifferential privacy parameter constitutes an extra degree of freedom which disentangles privacy from other application-specific parameters, giving more control over tradeoffs between utility and privacy (e.g. it is possible to fix 𝜖 first, and then independently decide on the batch size for an aggregation task).
Finally, most handcrafted protection and anonymity techniques do not offer the same elegant and practical properties as differential privacy. For instance, DP guarantees degrade gracefully when groups of reports are correlated, or when the same underlying data is aggregated multiple times (which is essential in some applications like federated learning), while ad-hoc methods or definitions such as k-anonymity can fail catastrophically in these cases. DP has other desirable properties, such as resilience to side information (for instance, some real-life privacy attacks can leverage datasets purchased from data brokers).
Fundamentally, differential privacy transforms the cat-and-mouse game of privacy engineering into a rigorous, mathematical framework in which privacy is proven, not merely claimed.
The science of privacy engineering: Making DAP differentially private
As an intern at Cloudflare (Summer 2023), my task was to devise a strategy for endowing DAP with differential privacy, while optimizing for some of Cloudflare’s use cases for DAP that we’ll explore in this post. There are many ways to do this. We highlight three techniques, that come with different threat models:
The simplest way is to compute the aggregate as usual, and then add noise to that. The DAP protocol defines a role known as the “Collector”, who is the intended recipient of the aggregate result. The Collector could add noise itself (which we might call Collector Randomization or Central DP). The problem of course is that the aggregate result is not DP from the point of view of the Collector.
Another method – called Local DP, or Client Randomization in the DAP context – is to ask each client to add noise to its report before submitting it. This provides strong privacy guarantees (DP holds even if all the Aggregators and the Collector are malicious) but usually comes at a cost in accuracy. This is because more noise has to be added to each measurement in order to achieve privacy. Though recent advances make such protocols practical in some cases.
DAP involves another role, called an “Aggregator”, that computes a share of the aggregate result. (Combining the Aggregators’ share yields the aggregate result.) As a middle-ground, we can have each Aggregator add noise to its aggregate share, thereby ensuring that the aggregate is DP from the point of view of the Collector. We must trust, of course, that at least one Aggregator is honest and adds noise from the proper distribution.
This third method, which we’ll call Aggregator Randomization, is the method we decided to investigate during my internship. It is straightforward to implement, has about the same computational overhead as basic Central DP, and satisfies the same threat model as DAP (more on that later!). Aggregator Randomization is illustrated below.
Although our Aggregator-Randomization version of DAP seems straightforward, we need to be convinced that it provides the privacy guarantees we expect. That means writing down the protocol and carrying out a formal analysis of its guarantees.
Interestingly, the traditional definition of DP and the standard proof techniques do not apply immediately to our setting. Indeed, unlike most DP mechanisms, DAP is an interactive protocol involving many parties (Clients, Aggregators, Collector) distributed across the Internet, and some of them might be malicious. Moreover, DAP’s security is based on computational assumptions (we assume that certain cryptographic problems, like cracking AES, are prohibitively costly), which consider adversaries that might run in a “reasonable” amount of time. Standard notions of DP consider adversaries that have arbitrary run time.
Luckily, other protocols combining differential privacy with multiparty computation have been studied in the past, and there are suitable definitions under the umbrella of Computational Differential Privacy. This definition of DP makes it possible to model a computationally bounded adversary interacting with a real-world protocol containing cryptographic components. However, more work needs to be done to build a generic framework for composing DP mechanisms with existing DAP subroutines (that already come with proven security guarantees).
Example: Making Network Error Logging private
To keep things concrete and get some experimental data, we looked for real-life DAP use cases where differential privacy could be useful and immediately applicable. Consider a protocol that privately aggregates and reports client-side connection errors to an origin, as a privacy-preserving alternative to Network Error Logging (NEL). It is a good use-case for DAP, because it is desirable to collect aggregate statistics (e.g. number of tcp.timed_out errors for a particular domain, or domains with the most errors in the past 24 hours), but individual reports may reveal sensitive information about browsing habits.
For simplicity, let’s focus on the case where the list of domains is already known, e.g., to track connection errors for a single domain, or across a closed set of paying customers. For the rest of the blog post, you can assume that we are using a DAP deployment to compute a histogram of connection errors for a single domain (but other statistics from the DAP specification share the same structure, which makes them suitable for similar DP mechanisms). The true aggregate might look something like this:
In this figure, we see a typical distribution of errors from 1,000 reports. The actual error types are irrelevant, and thus are just represented by numbers here. error_type = 8 is by far the most common, but we observe a smattering of other error types as well.
As we saw earlier, this aggregate information might still leak sensitive information – for instance, if an error type occurs only once, we might be able to tell whether a particular user visited a certain website. Now, our goal is to modify DAP to output a slightly noisy version of the histogram, so that it doesn’t leak information about individual reports.
libprio-rs is a widely-used Rust implementation of the cryptographic primitives used in DAP. To add DP, we started by designing a general API that any Aggregator Randomization scheme should satisfy, with objects to represent privacy budget and noise addition. Then, we implemented the DP API for concrete statistical aggregates. After reviewing various DP mechanisms, we settled on the discrete Gaussian and the discrete Laplace mechanisms, because of their clear guarantees and their suitability for modular ring arithmetic. We leveraged a secure noise sampler written in Rust by the OpenDP library. After adapting the Daphne implementation of DAP, we were able to run a toy deployment of DAP with differential privacy on network error logging data!
The art of privacy engineering: Exploring the privacy-utility trade-off
Recall that differential privacy involves a parameter, 𝜖, that determines the degree of privacy our system can achieve. From the code’s perspective, any positive real number is a valid choice here: smaller is more private, but also less useful. So what should we pick for 𝜖?
Up until this point, we have treated DP engineering as a science, but choosing 𝜖 remains somewhat of an art. To illustrate, let’s go back to our NEL data and compute some DP histograms for the network errors on one domain. Here are noisy histograms for different values of 𝜖:
We observe that decreasing 𝜖 yields noisier results, even giving negative counts in some cases – although we can always truncate or round results without losing privacy. Since this example has many reports and a few possible errors, it is reasonably easy to mask the contribution of any single individual. Here we see that 𝜖 = 1 seems to be a reasonable choice for this use case. We can still observe that the relative error is higher for rare events (such as error_type = 15) than for common errors (such as error_type = 8).
Let’s focus on these two events, and look at how 𝜖 impacts accuracy:
It becomes clearer that the accuracy increases with 𝜖 – an aggregate that is less noisy is also less private and more accurate. This tradeoff is known as the privacy-utility tradeoff. You can notice that the tradeoff depends on what we are measuring. If we are only interested in error_type = 8 and can tolerate at most 2% of relative error, then using 𝜖 = 0.01 would be sufficient. If we are interested in error_type = 15, then we would need to use 𝜖 = 0.1 to reach the same level of accuracy.
We can also look at how other parameters, such as batch size, can impact accuracy for a fixed privacy guarantee:
Intuitively, if we wait longer before computing an aggregate, we can get more accurate results for the same privacy level, because it is easier to mask a contribution if it is drowned in a large batch. As noted previously, we can set the privacy level upfront and adjust aggregation parameters later. If we try to collect an aggregate over a batch of size 1, the DP result will simply be close to random, and therefore protect the value of the single report in that batch. This graceful degradation – output useless results rather than breaking privacy on small batches – can be a problem in applications where accuracy is particularly important, but it can be controlled by choosing an 𝜖 that satisfies a comfortable accuracy-privacy tradeoff. It is always possible to get more accurate results, if we are willing to pay the privacy price for it.
Which brings us back to the question: what is a good value for 𝜖? Unfortunately, experts still haven’t reached a consensus on the right method to find 𝜖, as noted in this 2019 paper by Cynthia Dwork (one of the inventors of DP), Kohli and Mulligan. Indeed, some values of 𝜖 are suitable for certain deployments, algorithms, datasets or threat models, but not others. Unlike cryptographic applications that force attackers to guess a key that might have 2^128 values, 𝜖 has to be set to some non-negligible value in order to learn anything useful from the data. Ultimately, the notion of usefulness and what constitutes a privacy harm is dependent on the application.
Until we have a better understanding, a simple approach for non-experts is to search for the “standard” 𝜖 used in similar applications, and maximize accuracy under that privacy constraint. This method works if we have access to an “𝜖 Registry”, a detailed list of deployments for various use-cases and threat models. The US Census Bureau has an internal registry, but only some use cases are published so far. NIST gives some recommended ranges in this informal blog post (tldr: 0 < 𝜖 < 5 is strong, 5 < 𝜖 < 20 can be enough in practice). This blog post lists 𝜖s for deployments from Apple, Google and others.
There are additionalstrategies to set or evaluate the empirical guarantees of 𝜖. A complementary approach is to determine the maximum error you are willing to accept (e.g. 5% relative error on a count) and use simple properties of standard DP mechanisms to find the corresponding value of 𝜖 and check that it falls within an acceptable range.
Conclusion
As secure aggregation protocols such as DAP are increasingly deployed in real-world applications, it is important to remember that secure aggregation is not always enough to satisfy the users’ expectations of privacy. Differential privacy adds an extra layer of protection to these protocols. In short, secure aggregation protects the “how” (how to compute an aggregate from a set of reports), and DP protects the “what” (what kind of noisy aggregate we should release to avoid leaking too much information).
Thanks to the growing number of open-source implementations, applied research and standardization efforts for differential privacy and secure aggregation, there is now a clear path to integrate DP and DAP, thereby strengthening the privacy guarantees of practical measurement tasks. Interestingly, during our analysis we identified some parts of the DAP protocol that could pose problems with some forms of DP guarantees, such as the fact that Aggregators have access to the number of measurements or to the IP addresses of Clients. These findings, along with more thinking about the protocol logic, nourished debate around this and other topics at the IETF.
We also encountered many details that are often overlooked in the DP literature, such as modular arithmetic, API considerations, secure sampling or timing attacks. Overall, there is space for fruitful collaborations between cryptography and differential privacy experts, on protocols that can have a real impact.
If you’re interested in getting hands on with differential privacy, DAP, or any of Cloudflare’s other privacy-focused projects, consider applying for an internship on the Research team.
Acknowledgements
I’d like to thank my fantastic mentor Christopher Patton for guiding me during the summer – I learned many things from cryptographic details to IETF standards, and had a lot of fun along the way. Thanks to Josh Brown and Tanya Verma for our discussions, and to Avani Wildani and the rest of the Research team for their incredible support!
It’s been little over a year since ChatGPT was released, and oh how much has changed. Advancements in Artificial Intelligence and Machine Learning have marked a transformative era, influencing virtually every facet of our lives. These innovative technologies have reshaped the landscape of natural language processing, enabling machines not only to understand but also to generate human-like text with unprecedented fluency and coherence. As society embraces these advancements, the implications of Generative AI and LLMs extend across diverse sectors, from communication and content creation to education and beyond.
With AI service revenue increasing over six fold within five years, it’s not a surprise that cloud providers are investing heavily in expanding their capabilities in this area. Users can now customize existing foundation models with their own training data for improved performance and customer experience using AWS’ newly released Bedrock, Azure OpenAI Service and GCP Vertex AI.
Ungoverned Adoption of AI/ML Creates Security Risks
With the market projected to be worth over $1.8 trillion by 2030, AI/ML continues to play a crucial role in threat detection and analysis, anomaly and intrusion detection, behavioral analytics, and incident response. It’s estimated that half of organizations are already leveraging this technology. In contrast, only 10% have a formal policy in place regulating its use.
Ungoverned adoption therefore poses significant security risks. A lack of oversight through Shadow AI can lead to privacy breaches, non-compliance with regulations, and biased model outcomes, fostering unfair or discriminatory results. Inadequate testing may expose AI models to adversarial attacks, and the absence of proper monitoring can result in model drift, impacting performance over time. Increasingly prevalent, security incidents stemming from ungoverned AI adoption can damage an organization’s reputation, eroding customer trust.
Safely Developing AI/ML In the Cloud Requires Visibility and Effective Guardrails
To address these concerns, organizations should establish robust governance frameworks, encompassing data protection, bias mitigation, security assessments, and ongoing compliance monitoring to ensure responsible and secure AI/ML implementation. Knowing what’s present in your environment is step 1, and we all know how hard that can be.
InsightCloudSec has introduced a specialized inventory page designed exclusively for the effective management of your AI/ML assets. Encompassing a diverse array of services, spanning from content moderation and translation to model customization, our platform now includes support for Generative AI across AWS, GCP, and Azure.
Once you’ve got visibility into what AI/ML projects you have running in your cloud environment, the next step is to establish and set up mechanisms to continuously enforce some guardrails and policies to ensure development is happening in a secure manner.
Introducing Rapid7’s AI/ML Security Best Practices Compliance Pack
We’re excited to unveil our newest compliance pack within InsightCloudSec: Rapid7 AI/ML Security Best Practices. The new pack is derived from the OWASP Top 10 Vulnerabilities for Machine Learning, the OWASP Top 10 for LLMs, and additional CSP-specific recommendations. With this pack, you can check alignment with each of these controls in one place, enabling a holistic view of your compliance landscape and facilitating better strategic planning and decision-making. Automated alerting and remediation can also be set up as drift detection and prevention mechanisms.
This pack introduces 11 controls, centered around data and model security:
The Rapid7 AI/ML Security Best Practices compliance pack currently includes 15 checks across six different AI/ML services and three platforms, with additional coverage for Amazon Bedrock coming in our first January release.
For more information on our other compliance packs, and leveraging automation to enforce these controls, check out our docs page.
Organizations undergoing cloud migrations and business transformations often find themselves managing IT operations in hybrid or multicloud environments. This can make it more complex to safeguard workloads, applications, and data, and to securely handle identities and permissions across Amazon Web Services (AWS), hybrid, and multicloud setups.
In this post, we show you how to assume an AWS Identity and Access Management (IAM) role in your AWS accounts to securely issue temporary credentials for applications that run on the Google Cloud Platform (GCP). We also present best practices and key considerations in this authentication flow. Furthermore, this post provides references to supplementary GCP documentation that offer additional context and provide steps relevant to setup on GCP.
Access control across security realms
As your multicloud environment grows, managing access controls across providers becomes more complex. By implementing the right access controls from the beginning, you can help scale your cloud operations effectively without compromising security. When you deploy apps across multiple cloud providers, you should implement a homogenous and consistent authentication and authorization mechanism across both cloud environments, to help maintain a secure and cost-effective environment. In the following sections, you’ll learn how to enforce such objectives across AWS and workloads hosted on GCP, as shown in Figure 1.
Figure 1: Authentication flow between GCP and AWS
Prerequisites
To follow along with this walkthrough, complete the following prerequisites.
Create a service account in GCP. Resources in GCP use service accounts to make API calls. When you create a GCP resource, such as a compute engine instance in GCP, a default service account gets created automatically. Although you can use this default service account in the solution described in this post, we recommend that you create a dedicated user-managed service account, because you can control what permissions to assign to the service account within GCP.
To learn more about best practices for service accounts, see Best practices for using service accounts in the Google documentation. In this post, we use a GCP virtual machine (VM) instance for demonstration purposes. To attach service accounts to other GCP resources, see Attach service accounts to resources.
Obtaining temporary AWS credentials for workloads that run on GCP is a multi-step process. In this flow, you use the identity token from the GCP compute engine metadata server to call the AssumeRoleWithWebIdentity API to request AWS temporary credentials. This flow gives your application greater flexibility to request credentials for an IAM role that you have configured with a sufficient trust policy, and the corresponding Amazon Resource Name (ARN) for the IAM role must be known to the application.
Make sure to replace the <placeholder values> with your values from the Google ID Token. The ID token issued for the service accounts has the azp (AUTHORIZED_PARTY) field set, so condition keys are mapped to the Google ID Token fields as follows:
accounts.google.com:oaud condition key matches the aud (AUDIENCE) field on the Google ID token.
accounts.google.com:aud condition key matches the azp (AUTHORIZED_PARTY) field on the Google ID token.
accounts.google.com:sub condition key matches the sub (SUBJECT) field on the Google ID token.
The authentication flow for the scenario is shown in Figure 2.
Figure 2: Detailed authentication flow with AssumeRoleWithWebIdentity API
The authentication flow has the following steps:
On AWS, you can source external credentials by configuring the credential_process setting in the config file. For the syntax and operating system requirements, see Source credentials with an external process. For this post, we have created a custom profile TeamA-S3ReadOnlyAccess as follows in the config file:
Specify a program or a script that credential_process will invoke. For this post, credential_process invokes the script /opt/bin/credentials.sh which has the following code. Make sure to replace <111122223333> with your own account ID.
The IAM trust policy uses the aud (AUDIENCE), azp (AUTHORIZED_PARTY) and sub (SUBJECT) values from the JWT token to help ensure that the IAM role defined in the section Define an IAM role in AWS can be assumed only by the intended GCP service account.
The script invokes the AssumeRoleWithWebIdentity API call, passing in the identity token from the previous step and specifying which IAM role to assume. The script uses the Identity subject claim as the session name, which can facilitate auditing or forensic operations on this AssumeRoleWithWebIdentity API call. AWS verifies the authenticity of the token before returning temporary credentials. In addition, you can verify the token in your credential program by using the process described at Obtaining the instance identity token.
The script then returns the temporary credentials to the credential_process as the JSON output on STDOUT; we used jq to parse the output in the desired JSON format.
Note that AWS SDKs store the returned AWS credentials in memory when they call credential_process. AWS SDKs keep track of the credential expiration and generate new AWS session credentials through the credential process. In contrast, the AWS CLI doesn’t cache external process credentials; instead, the AWS CLI calls the credential_process for every CLI request, which creates a new role session and could result in slight delays when you run commands.
Test access in the AWS CLI
After you configure the config file for the credential_process, verify your setup by running the following command.
Amazon CloudTrail logs the AssumeRoleWithWebIdentity API call, as shown in Figure 3. The log captures the audience in the identity token as well as the IAM role that is being assumed. It also captures the session name with a reference to the Identity subject claim, which can help simplify auditing or forensic operations on this AssumeRoleWithWebIdentity API call.
Figure 3: CloudTrail event for AssumeRoleWithWebIdentity API call from GCP VM
Test access in the AWS SDK
The next step is to test access in the AWS SDK. The following Python program shows how you can refer to the custom profile configured for the credential process.
import boto3
session = boto3.Session(profile_name='TeamA-S3ReadOnlyAccess')
client = session.client('s3')
response = client.list_buckets()
for _bucket in response['Buckets']:
print(_bucket['Name'])
Before you run this program, run pip install boto3. Create an IAM role that has the AmazonS3ReadOnlyAccess policy attached to it. This program prints the names of the existing S3 buckets in your account. For example, if your AWS account has two S3 buckets named DOC-EXAMPLE-BUCKET1 and DOC-EXAMPLE-BUCKET2, then the output of the preceding program shows the following:
DOC-EXAMPLE-BUCKET1
DOC-EXAMPLE-BUCKET2
If you don’t have an existing S3 bucket, then create an S3 bucket before you run the preceding program.
The list_bucket API call is also logged in CloudTrail, capturing the identity and source of the calling application, as shown in Figure 4.
Figure 4: CloudTrail event for S3 API call made with federated identity session
Clean up
If you don’t need to further use the resources that you created for this walkthrough, delete them to avoid future charges for the deployed resources:
Delete the VM instance and service account created in GCP.
Delete the resources that you provisioned on AWS to test the solution.
Conclusion
In this post, you learned how to exchange the identity token of a virtual machine running on a GCP compute engine to assume a role on AWS, so that you can seamlessly and securely access AWS resources from GCP hosted workloads.
We walked you through the steps required to set up the credential process and shared best practices to consider in this authentication flow. You can also apply the same pattern to workloads deployed on GCP functions or Google Kubernetes Engine (GKE) when they request access to AWS resources.
If you have feedback about this post, submit comments in the Comments section below. If you have questions about this post, contact AWS Support.
Want more AWS Security news? Follow us on Twitter.
In Writer, users can enter a ChatGPT-like session to edit or create their documents. In this chat session, the LLM can retrieve information from sources on the web to assist users in creation of their documents. We show that attackers can prepare websites that, when a user adds them as a source, manipulate the LLM into sending private information to the attacker or perform other malicious activities.
The data theft can include documents the user has uploaded, their chat history or potentially specific private information the chat model can convince the user to divulge at the attacker’s behest.
Когато през 2011 г. Паметникът на Съветската армия в София стана обект на креативно остроумие, тенорът в държавните руски медии беше жлъчен и враждебен: „Болгары осквернили наш памятник“. През 2023-та това надали изненадва, но по онова време за първи път имах възможността да се сблъскам с преднамереното култивиране на шовинизъм и реваншизъм в Путинова Русия. Повече време ми отне да си дам сметка и за заметените под килима неприятни истини за нашата собствена история.
Работата е там, че в държави като България и Русия колективната памет e една от най-политизираните сфери на обществения живот, макар и невинаги това да е видимо с просто око. Официалните истории, които разказваме на себе си за самите себе си, нерядко са минали през предварителна обработка – било то в академии на науките, медии или пък в партийни централи. Типично за такава институционална обработка е, че на входа на поточната ѝ линия влизат нееднозначни събития, конфликти, противоречия и дилеми, а накрая излиза отливка на собствената нация – и като по чудо тя е все неоправдана, непокварена, героична и предадена. Иначе казано, много от онова, което считаме за „памет“, не е фотографски отпечатък, а преднамерено пресяване на факти и трактовката им по двоен стандарт.
Паметниците, както подсказва коренът на самата дума, са централни ръчки в един такъв селективен механизъм. Паметникът на Съветската армия не прави изключение. Дали като обект на омраза, или на преклонение, политизацията му по странен начин се вписва в политическия дневен ред на често менящите се власти в София и на несменяемите в Москва. За българите, както и за руснаците дебатите около него бяха удобна възможност да избягат от историческата си отговорност – всеки по свой начин.
Българските митове
Българското общество привидно е разделено относно паметника: поне ако се съди по драстичните разнопосочни изказвания на граждани, активисти и политици. Истината обаче е, че под повърхностните спорове съществува широк консенсус да се премълчава и да не се осмисля българският колаборационизъм с нацистите през Втората световна война. Този консенсус обхваща либерали и консерватори, „стари“ и „нови“ леви, възрастни и млади поколения.
А фактите са налице: българското правителство е неохотен, но опортюнистичен съюзник на Хитлер. България далновидно отказва да воюва редом с Германия и да прати войници на Източния фронт, но се възползва от съюза с нея, за да удовлетвори иредентистките си претенции и да откъсне територии от съседните Югославия (Югоизточна Сърбия и Източна Македония) и Северна Гърция (Западна Тракия). В беломорските региони българските окупационни власти извършват целенасочени репресии срещу гръцкото население, а във Вардарска Македония стават посредници в Холокоста, депортирайки хиляди македонски евреи, впоследствие избити в концентрационния лагер Треблинка.
Все пак 50 000 евреи с български паспорти не са депортирани, а „само“ разселени вътре в страната, основно от София. Но от гледна точка на тогавашната окупационна администрация македонските евреи също са имали право на българско гражданство. Голяма част от българската историография и до днес двулично твърди, че българската държава хем е „спасила“ евреите си, хем македонците са българи, хем македонските евреи не са български евреи и следователно съдбата им не е българска отговорност. С оглед на това двуличие, на днешните македонци съвсем не им е нужна пропаганда, за да помнят българите като колаборационисти и окупатори. Достатъчно е да се споменат депортираните евреи или да се загледа човек в архивните снимки на македонски девойки сред портретите на цар Борис III и Адолф Хитлер, окичени с венци.
Руските митове
Един произволен паметник на Балканите, разбира се, не играе такава важна символична роля в руските дебати, каквато има у нас. При все това руската реакция също се вписва в шовинистичен дискурс, който може да се нарече „идеята за всеобхватното имперско величие“, често повтарян и у нас.
Тази идея се различава от националния шовинизъм в различни аспекти: опитва се да асимилира другите, вместо да се разграничава от тях; да говори от гледната точка на мним универсализъм вместо на мнима национална уникалност; да борави с цивилизационни вместо с етноцентристки категории. Въпреки това зад нея прозира същият мит за изначална невинност: военната слава изкупува всяка вина, а цивилизационната мисия – насилието. Това са стари колониални тропи, които свързват с невидима нишка петроградско-царисткия и московско-комунистическия експанзионизъм.
Ето защо и в официалния руски наратив Червената армия пристига навсякъде като „освободител“, а не като „окупатор“, включително там, където оставя след себе си тежки военнопрестъпления срещу цивилното население, както например в Източна Прусия. В самата България съветската инвазия е придружена от ескалиращо насилие, групови разстрели и масови гробове.
Окуражени от присъствието на окупационната армия, българските комунисти излизат от нелегалност и подкрепени с военна сила, се впускат в кървави политически чистки, за да установят едноличната си власт. Всичко това става въпреки факта, че последното краткотрайно българско правителство преди 9 септември 1944 г. всячески се стреми да излезе от хватката на нацистите и да избегне конфликт с СССР. В знак на добра воля към Алианса опозиционното правителство на Константин Муравиев започва да изтегля българските войски от окупационните зони и дори обявява война на Германия.
Такива аргументи не интересуват повечето днешни руснаци – по същия начин, по който съдбата на македонските евреи е безразлична на повечето днешни българи. И руснаците, както и българите, са привикнали към една полирана история за Втората световна война, в която собствената страна е еднозначно героична, жертвоготовна и онеправдана.
Преплитането на митове
Интересното в случая е, че паметникът, макар и комисиониран от българската държава и изпълнен от български творци, подсилва московската версия на мита за изначалната невинност*. Надписът му – „На Съветската армия освободителка от признателния български народ“ – е препратка към паметника на Александър II пред Народното събрание, който също дословно говори за освобождение и признателност. Така още от самото начало се създават неточни исторически паралели между две епохи с цел по-добро вписване в българския контекст и легитимиране на новата комунистическа власт.
БКП изгражда клиентски режим на Москва и е изцяло зависима от нея в икономическо и политическо отношение. Освен това българските комунисти не идват на власт със свои сили и самостоятелна борба както например Титовите партизани в Югославия. „Признателността“ трябва да се чете и в такъв контекст: легитимацията на новия режим критично зависи от тази на Деветосептемврийския преврат. А това най-лесно се прави, като се бръкне в кутията с исторически инструменти и се извади наръч от грешни аналогии и емоционални внушения.
За българите, независимо от това дали са съгласни с историята за „двойното освобождение“ и „признателността“, това е удобно извинение да не се замислят за собствената си историческа отговорност. Мотивите – както за приемането му, така и за отхвърлянето му – са апологетични и все се плъзгат по вече изтърканата ос комунизъм–антикомунизъм, като удобно се забравя за паметта на жертвите.
За руснаците пък повтарянето на такива наративи в страни, които възприемат като бившата си периферия, са още по-пагубни, защото хвалебствените приказки само наливат масло в реакционния огън. Това твърдение на пръв поглед изглежда парадоксално, но победата във „Великата отечествена война“ от много време насам е опора на новия руски реваншизъм. Още през май 1945 г. Сталин вдига печално известния тост за „великата руска нация“, умишлено омаловажавайки приноса на множеството големи и малки народи на СССР за победата над нацизма.
Този москвоцентричен прочит кулминира при Путин в един феномен, който още през 2005 г. получи сполучливия етикет „победобесие“. Вече от десетилетия авторитарната държавна машина подменяживата памет за жертвите с помпозно инсценирани мероприятия и игнорира колективната травма в името на един кръвожаден милитаристки наратив. По горчива ирония на съдбата в Путинова Русия именно споменът за победата над фашизма се превърна в способ за неговото възраждане, както и за оправдание на една нова завоевателна война.
Ритуално поднесената „признателност“ на този фон е опасно неразличима от поощряване на имперската реакция.
Несъстоялият се дебат
Тези два прочита – национално-невинният и имперско-реакционният – са в много отношения огледални. Въпреки това в България те образуваха двата полюса на един деструктивен дебат, в който всяка страна приема гледната си точка за сакрална част от собствената идентичност. Това е много удобно за всички – така няма нужда никой да се вторачва в неудобни исторически детайли.
Всички можем вкупом да се преструваме и да поддържаме фикциите, които стоят в основата на крехките ни идентичности. Така че премахвайки паметника без истинска обществена дискусия, Общината прави същото, което и през 2011 г., когато потайно изпрати свои служители да го търкат през нощта с веро: циментира митовете, вместо да ги демонтира. Така изгубихме една възможност да бъдем по-наясно със самите себе си. Руснаците са изпуснали тази възможност много отдавна. Дано ние имаме още шансове.
* Това се случва и независимо от оригиналния замисъл на творците на паметника, между които е Любомир Далчев, брат на поета Атанас Далчев. Самият процес на комисиониране е обвит в противоречия и сблъсъци относно идеята и изпълнението, в които държавата надделява над творческите идеи на Далчев и колеги. Вж. СГХГ (2022), Любомир Далчев: Неспокойният дух.
Два вота – парламентарен и местен, конституционни промени, премахването на Паметника на Съветската армия и премахването на главния прокурор Иван Гешев, убийството на бизнесмена и бивша барета Алексей Петров, изтегляне на „Лукойл“ (и) от България. Писателят Георги Господинов и преводачката му Анджела Родел спечелиха международната литературна награда „Букър“ за романа „Времеубежище“. Филмът „Уроците на Блага“ на режисьора Стефан Командарев вече се разпространява в САЩ – нещо неслучвало се от съкратената версия на „Хан Аспарух“ през миналия век.
Всички тези събития са вплетени в глобалната картина: войната в Украйна, която скоро ще навлезе в третата си година; ужасяващият нов конфликт в Газа между Израел и „Хамас“, който ще посее други; предстоящите президентски избори през ноември 2024 г. в САЩ и през идния март в Русия и Украйна. Изкуственият интелект, който променя настоящето и бъдещето на цивилизацията. Климатичните промени, които – наред с военните конфликти – ще увеличат мигрантския натиск към Европа. Изборите за Европейски парламент, за които крайнодесните, в това число и българската партия „Възраждане“, се борят не просто за представителство, а да бъдат трета политическа в ЕС.
Сглобката е коалиция, коалицията разпределя
Предсрочните парламентарни избории геополитическото напрежение„подариха“ на България сглобката между ПП–ДБ и ГЕРБ–СДС, тутакси разширила се до конституционно = евроатлантическо мнозинство заради кооптирането на ДПС. Тази политическа конвергенция е управляваща коалиция и няма аргументи, които да го опровергаят. Законите за бюджет и данъци, милиардни проекти за модернизация на армията и подкрепа за Украйна, включително решенията за назначения в регулатори, (ще) се вземат с гласовете на две трети от народните представители – колкото съставляват трите политически сили. С техните гласове минаха и трите четения на конституционните промени.
Предстоящите догодина избори за попълване или обновление на различни регулатори и институции са истинският тест за бъдещето на тази коалиция. Тя отдавна не е механична сглобка от отделни елементи, а сплавена конструкция. Обещаният на 1 декември регламент за избор на членове на регулатори и за кадруването в съдебната система още не е готов. Засега няма индикации дали шефовете на службите ще са сред готвените смени.
Ако коалицията не се разпадне след избора на членове на Конституционния съд, Комисията за финансов надзор, Комисията за защита на потребителите, Комисията за защита на конкуренцията, Комисията за енергийно и водно регулиране, Инспектората към Висшия съдебен съвет (ВСС), самия ВСС, Висшия прокурорски съвет и на други над 17 регулатора, по сметките на депутата от „Продължаваме промяната“ Никола Минчев евроатлантиците ги чака още управление. Формално договореният срок между ПП–ДБ и ГЕРБ–СДС изтича в края на следващата година – 9 месеца след ротацията на 6 март.
Шестата поправка на Конституцията. Кой, той и те в съдебната и във всички останали системи
След като конституционните промени бяха приети, една от причините да го има триъгълника на властта ГЕРБ–СДС, ПП–ДБ и ДПС отпадна. Но ДПС остава в управляващото мнозинство, тъй като евроатлантизмът също е основание за съществуването му.
По-значима във вътрешнополитически план е закованата в Конституцията норма за ръководители на регулаторните органи да са гласували две трети от народните представители – и така е невъзможно ДПС да бъде извадено от управленското мнозинство. Мандатите на регулаторите в повечето случаи надхвърлят пълния 4-годишен управленски мандат и са бетонирани срещу предсрочни избори. Според приетите в Конституцията текстове при избора на ръководители на регулаторните органи трябва „да се спазват принципите на откритост, прозрачност, публичност и обоснованост, за да се гарантира тяхната независимост“. Тепърва тази декларативност ще се изпълва – или не – със смисъл.
От една страна, нормата може да се тълкува като законодателен израз на очертаващата се тенденция България да бъде управлявана от многопартийни парламенти. Така предвиденото съгласие от минимум 160 гласа би означавало професионална селекция. Практиката досега показва обратното – парцелиране на регулатори и институции. А и председателката на парламентарната група на ГЕРБ Десислава Атанасова обяви пред bTV, че ДПС ще участва в управлението на регулаторите и тежестта му ще е една трета. Макар съпредседателят на „Демократична България“ Христо Иванов да отхвърли опцията за „парцелиране“.
Четирийсет и деветият парламент и конституционалистите му имат дълъг срок от 6 месеца, в който да приемат законите, свързани с измененията в Основния закон. И още 3 месеца срок след влизането в сила на тези изменения, за да проведат избори за членове на ВСС и Висшия прокурорски съвет. А после Висшият прокурорски съвет ще избере главен прокурор. 2024-та ще мине под знака на голямото кадрово обновление на системите начело със съдебната, и свои кадри в тях ще имат, освен ГЕРБ и ДПС, които доминираха досега, и ПП–ДБ. Върху тези новоизбрани магистрати ще падне тежестта да изпълнят целите, заложени от политиците. Христо Иванов ги определи така:
Истинска независимост на българския съд по европейски стандарт, отчетна, ефективна и модерна прокуратура, която служи на закона, и справедливо правосъдие.
По думите му, „българската политическа система трябва да използва постигнатия консенсус като платформа за бъдещи съгласия, за да продължи институционалното разграждане на корупционния модел в страната“. Невъзможно за вярване – създателите на корупционния модел в лицето на ГЕРБ и ДПС да участват в демонтажа му. Освен ако не действат по познатата схема – да изхвърлят ненужните им и употребени от тях „бухалки“, както се случи с бившия вече главен прокурор Иван Гешев, и да изберат нови.
Преди това обаче за промените ще се произнесе Конституционният съд.
„Лукойл“ си тръгва. Да живее „Лукойл“?
ГЕРБ, ПП–ДБ и ДПС си мереха евроатлантизма по санкциите срещу руския петрол и „Лукойл“. В различни периоди и ГЕРБ, и ДПС имаха повече от добро разбирателство с руската компания на местна почва, а с настойчивостта на ПП бе прокарано и изключението за България от европейското ембарго, за да продължи да внася руски суров петрол до края на 2024 г.
Но с промени в Закона за контрол по прилагане на ограничителните мерки с оглед на действията на Русия, дестабилизиращи положението в Украйна, трите политически сили наложиха от 1 януари 2024 г. отпадане на квотите за износ, а от 1 март и забрана за вноса на руски нефт. Това бързане съвпада с добилата публичност новина, че частната руска компания ще продаде рафинерията си в Бургас – и до голяма степен я обуславя. Кой ще купи рафинерията на „Лукойл“ – свързан с руските ѝ собственици инвеститор, скрит зад инвестиционни фондове, или стратегически инвеститор, – е от значение за пазара на едро на горива в България, където сега „Лукойл“ има господстващо положение.
В 12 без 5 обаче в закона се отвориха вратички, които дават възможност на „Лукойл“ да спечели близо 700 млн. лв. чрез „Нефтохим“. Причината е, че „Лукойл“ рязко е увеличил вноса на руски петрол, за да напълни складовете си. Разкритието направи експертът от Центъра за изследване на демокрацията Руслан Стефанов в своя анализ на законодателните пробойни.
Тъй като след август 2023 г. България е увеличила вноса на руски нефт успоредно с нарастващите покупки на неруски петрол (около 20% от общите количества, по данни, цитирани от Министерството на икономиката), „Лукойл“ вероятно ще е натрупал запаси от между 4 и 5 млн. барела нефт в края на годината (около месец и половина потребление на България). […]
Допълнителните (натрупани като запаси) количества могат да бъдат преработени в бензини и след това изнесени на световния пазар през 2024 г. според предвидената в закона възможност за износ. Това би осигурило на „Лукойл“ приходи на стойност над 360 млн. долара през 2024 г.
Погребението на митове. Новият разказ
2023-та приключва с демонтажа на Паметника на Съветската армия, по-известен като МОЧА – Монумент на окупаторската Червена армия. 2024-та е за новия наратив за мястото. Трябваше да е започнал.
Нов паметник, без паметник, скейт парк, място за тренировки по паркур, сцена, розариум, кафене? Освобождението на Княжеската градина от паметници означава разказ за бъдещето.
Човек пада в дупка. Така описва Вонегът класическата фабулна линия, започваща с беда и завършваща със спасение.
Човек се движи към пропастта. Не просто човек, дете. Движи се бавно и забелязва всички детайли по пътя си, за да отложи пропадането, което е неизбежно. Или не: движи се бавно и забелязва всички детайли по пътя си, защото пропадането вече се е случило и сега обследва наум последните метри преди катастрофата, за да види какво всъщност е водило натам.
Всичко.
Казват, че деца, на които се е случило нещо ужасно, си измислят вина като начин за справяне с травмата. Като начин за преодоляване на своята безпомощност. Докато пристъпва заедно с Йожи, читателят изпитва подобно усещане – че някой малък жест ще събори порцелановата статуетка, ще нарани, ще прогони. Но не е това.
Възрастният глас, който разказва за Йожи, знае, че детето пази счупената от друг порцеланова овчарка. Че невинната реплика не може да предизвика пожар. И че дори катастрофата с долмичките и роклята на малката Ида е предзададена от друг, както впрочем и другите, по-сериозните катастрофи – тези, които са белязали възрастните още преди прохождането на Йожи. В тях има от реалната, линейна история – войни, декласиране, интерниране и пр., но има и от другата история, която се върти в кръг, тази на литературните архетипи. Мислиш, че се движиш по права линия, а се оказваш в кръговото, както пише Надежда Радулова.
Очаквано, архетипите са приказни. Неочаквано, приказните архетипи не са фолклорни, а авторски. Андерсенови, по много особен начин. Овчарката и коминочистачът. Галошите на щастието. Храбрият оловен войник. Малката русалка. Снежната царица (с пленителна размяна на имената на Кая и Снежан). Дори препратка към „Дивите лебеди“, скрита в избуяващата насред войната коприва. Или към единайсетте гарвана вместо единайсетте лебеда, докато героинята крачи към тях, за да заеме мястото на дванайсетия елемент, тяхната сестра Елиза?
Тези архетипи обаче присъстват във „възрастния“ разказ, докато приказките, които разпукват историята на Йожи, са от друг порядък. Те са приказки, чието разказване е театрализирано, ние ги виждаме като разговор между възрастен и дете; възрастен и дете, които непрекъснато заобикалят класическите решения. Самите истории, които се получават, имат свойството да са едновременно паметни и поливалентни, каквито са по условие митовете. Последният път, когато съм чела такива истории на български, беше в „4 приказки без връщане“ на Яна Букова.
Приказките в тази книга също са част от „кръговото“. Те се разказват, по-скоро импровизират, в разговор между майка и дете. Коя от двете е Йожи? Или и двете? В началото я виждаме като едва проговорило полубебе, в края – като старица. А през цялото време е и двете. Както опакото на земята прозира със своите искрящи цветни плодове през желираната субстанция под бялата кал в дълбочината под нищото, насред мъртвата точка в морето, която непрекъснато притегля лодката на разказвача. Прочее, ето какво тегли разказа към катастрофата – сочната, екзотична, мрачна красота на езика и образите в него. Езикът на преводачката на „Безкрайното Саргасово море“ и авторката на „Памук, стъкло и електричество“, на „Бандонеон“ и „Когато заспят“. В този език има различни пластове, но най-добре е разгърнат онзи, в който се усеща най-силно тягата на нощта.
Когато майсторът навлязъл в гората, тъмата вече била попила в пръстта под копитата на коня му и от танцуващите огньове нямало и следа. Тъмата била свежа и чиста, нощните растения се отваряли за живот и изпускали силно ухание, наметката от тишина постепенно се разкъсвала и до ушите на зидаря започвали да достигат чудните звуци на нощта, каквито не можели да се чуят денем и на открито. Съскания и почуквания, скърцане и скриптене, притаени песни, които падащият ниско ветрец изтръгвал от тревите, а от време на време едва доловим вой, далечен поздрав на събудените в мрака.
Специални поздравления за конгениалната корица на Свобода Цекова, събрала втренчената в читателя крехкост на тази история.
поетичен превод Георги Рупчев и Иван Методиев, илюстрации Николай Майсторов, София: Издателство за поезия „ДА“, 2023
Първо, много особено е да четеш точно този текст в два различни превода, един след друг, и двата рязко отличаващи се от познатите, щамповани в съзнанието ти версии.
Всъщност преводите са три: третият са рисунките на Николай Майсторов, които като че ли са антиилюстрации – и в този смисъл мощен ключ към прочита на текста. Защото в тях няма нищо от златото и нара, от козите и криновете, от войнството под знамената; няма древни градове, няма кобилки в колесници, няма мирта, която да капе върху ключалката, докато бързаш да отвориш на любимия си.
Рисунките са черно-бели, телата в тях са обикновени, раними, голи в някакви голи, тъмни и не особено уютни помещения. Това са тела, които изпитват страх, самота, студ. Това са любовниците от най-стряскащите редове в „Песен на песните“ – там, където любимият чака пред вратата и си тръгва, там, където любимата тръгва да го търси пред крепостните стени и стражите я бият и късат наметката ѝ. Това са тези, които изпитват нужда от думи като „Песен на песните“.
Много се радвам, че двата превода на двамата големи поети Георги Рупчев и Иван Методиев не са един до друг на страницата, да се състезават в някакъв задочен поетично-преводачески дуел, а са сложени един след друг, което предразполага читателя да потъне в текста от край до край и всеки път наново. Да чуе тези редове първо в отчетливия слог на Рупчев, чиято поетика тук е по-предметна, език от съществителни и предлози, език, който се движи през образите с преднамерена крачка, като в тържествена процесия, и после в по-интимния слог на Иван Методиев, който използва по друг начин възможностите на българския език в преминаването към други части на речта.
Безсмислено е да говорим за този том като за сравнение на два превода – това са по-скоро личните прочити на двама големи поети,
и двамата работили с подстрочник, и двамата създали текстове, които носят наслада и утеха. Текстове за четене на глас.
„Кой те обича“ от Каръл Ан Дъфи
превод от английски Калоян Игнатовски, София: Издателство за поезия „ДА“, 2023
Стихотворенията на Каръл Ан Дъфи в „Кой те обича“ предразполагат към театрализация, поне наум, по време на четенето.
Първо, защото много от тях говорят от името на някого. Деметра. Медуза. Жената на Дарвин. Жената на Икар! Делфините, изпълняващи номера за пред хората. Жена в метрото през 1941 г., която е бременна и не помни нищо. Учителка по английски, когато в класа гостува поет. Учителка по английска литература, която изпитва.
Ролята на тези персонажи никога не е еднозначна. В някои случаи стихотворението е ребус и името на персонажа е отговорът на загадката – но ти го забелязваш едва когато си се блъскал в образ подир образ и си разпознал там първо себе си.
И вече не сме блажени, защото светът няма да стане дълбок, за да мечтаем в него. Другият знае това и от обич става мое отражение.
„Делфините“
Друг път говорещият те кани със себе си на сцената, издърпва те за кръстосан разпит, вглежда се отчаяно в самия акт на четенето, пита и твоето четене ли е такова.
Каръл Ан Дъфи прави това на три пъти: веднъж – в стихотворението за гостуващия поет; втори път – в стихотворението с изпитването по литература; трети път – най-ненадейно – в стихотворението за кражбата на снежен човек. Крадецът в него задига неща, които носят радост и наслада на другите, но той самият не е способен да ги изпита и това го озверява. Снежен човек. Китара, на която някой ден ще се научи да свири. Бюст на Шекспир. Дали това стихотворение не си представя собствения си неразбиращ читател в ролята на крадеца? Дали не си представя нас? Затова ли завършва с „Не разбирате какво ви говоря, нали?“?
Чудесен превод на Калоян Игнатовски – уловил е динамиката на драматичния монолог, нервността на жеста, паузите, резките смени на темпото, на посоките.
Потърсих да чуя как Каръл Ан Дъфи чете поезията си на живо, после погледнах пак как звучи на български. Впечатли ме чувствителността на преводача, който умее да я следва и в троснатата реплика, и в застиналата тъга. Поздравления!
Впрочем прииска ми се да чета тази книга заедно с „Песен на песните“ заради ето това стихотворение:
Горките любовници, които се качват във високата стая, където ги чакат леглото и нежните лампи, и дебаркират от своя живот. Високите вълни на нощта се плискат в прозореца.
Времето се изплъзва като суша от кораб. Луната, собствената им смърт, ги следва, студена, студена в техните одеяла. Горките любовници, бездомни, нямат си страна, към която да отплават.
Активните дарители на „Тоест“ получават постоянна отстъпка в размер на 20% от коричната цена на всички заглавия от каталозите на „Жанет 45“, както и на няколко други български издателства в рамките на партньорската програма Читателски клуб „Тоест“. За повече информация прочетете на toest.bg/club.
В емблематичната си колонка, започната още през 2008 г. във в-к „Култура“, Марин Бодаков ни представяше нови литературни заглавия и питаше с какво точно тези книги ни променят. Вярваме, че е важно тази рубрика да продължи. От човек до човек, с нова книга в ръка.
В нощта преди Коледа в цялата къща кротуваха всички – мишлетата също – закачили чорапи по стар обичай до комина за дар от свети Николай. Децата уютно в леглата завити, с мечти за бонбони им пълни главите. Унасях се вече, видях как и мама под нощната шапчица също задряма, когато на двора чух врява такава, че станах да видя какво ли пък става. Към прозореца скочих, забравил за сън, капаците бутнах, погледнах навън – под луната гърдите на пресния сняг ослепително светеха в нощния мрак. И смаян, видях изумителна сцена – във малка шейничка със осем елена един така жизнен и пъргав старик, че веднага разбрах: той е Старият Ник. Стремглаво пресичаха въздуха зимен, а той с бодър вик ги зовеше по име: „Тук, Дашър! Тук, Дансър, тук, Прансър и Виксен! Дий, Комет и Кюпид, и Донър, и Бликсен! Към покрива бързо! Напред към комина! Напред и нагоре, сговорна дружина!“ И те полетяха към покрива в миг с шейната с играчки и Стария Ник, като сухи листа преди бурята, дето щом срещнат преграда, и литват в небето. А после ги чух как над мене с копита тупуркат и тичат, и ритат, и рипат. Сетне – тъкмо затварях прозореца впрочем – гледам, Старият Ник от комина изскочил. Беше целият в кожи, обаче полепнал от глава до пети в черни сажди и пепел. Като някой търговец с товара си скъп беше метнал торбата с играчки на гръб. С този блясък в очите и с тези трапчинки! Със страни като рози, а носът му – малинка! Засмян до уши и със поглед преблаг, а брадата му – бяла, по-бяла от сняг. Между зъбите стиска мундщук на лула и димът го обвива с венец от мъгла. А коремът му кръгъл, когато се смее, се подрусва и люшка, сякаш купа с желе е. Същи весел стар елф, свеж и румен. И аз се усмихнах неволно. После прихнах на глас! Той ми смигна и кимна, и тогава разбрах, че не трябва от нищичко да ме е страх. Без да каже и дума, мигновено напълни всички наши чорапи и към мен се обърна, и даде ми знак тайната му да пазя, и отново ми кимна, и в комина пролази! В шейната се метна, на впряга си свирна, като лек върбов пух литна в нощната шир, но го чух как извика със радост и мощ: „Весел празник на всички и лека ви нощ!“
(1823) Клемънт Кларк Мур Превод от английски Мария Змийчарова
Клемънт Кларк Мур (1779–1863) е американски писател, учен и предприемач, преподавател по литература и теология, член на Борда на настоятелите на Колумбийския колеж (впоследствие Колумбийски университет), автор на ивритско-английски речник. Стихотворението „Посещението на свети Николай“ е публикувано за пръв път на 23 декември 1823 г. в нюйоркския вестник „Сентинъл“, първоначално анонимно. По онова време е било обичайно сериозните учени да предпочитат името им да не се свързва с фриволни детски стихчета. Популярността на римуваната история обаче расте и през 1837 г. Мур е публично обявен за неин автор. Близък приятел на Уошингтън Ървинг той вероятно се е повлиял от неговите описания на свети Николай, но така или иначе именно това стихотворение до голяма степен формира днешната представа за Дядо Коледа и утвърждава традицията за оставяне на подаръци за децата на Бъдни вечер.
Мария Змийчарова (р. 1983) превежда проза, поезия и драматургия от английски, шведски, датски и норвежки. Макар че няма издадени преводи на детска литература, открай време превежда историйки и стихотворения за собствено удоволствие, а от един момент нататък – и за децата си, с надеждата, че все някога може би ще ги прочетат и други. (Този превод например е от 2014 г.)
Според Екатерина Йосифова „четящият стихотворение сутрин… добре понася другите часове“ от деня. Убедени, че поезията държи умовете ни будни, а сърцата – отворени, в края на всеки месец ви предлагаме по едно стихотворение. Защото и в най-смутни времена доброто стихотворение е добра новина.
The collective thoughts of the interwebz
Manage Consent
To provide the best experiences, we use technologies like cookies to store and/or access device information. Consenting to these technologies will allow us to process data such as browsing behavior or unique IDs on this site. Not consenting or withdrawing consent, may adversely affect certain features and functions.
Functional
Always active
The technical storage or access is strictly necessary for the legitimate purpose of enabling the use of a specific service explicitly requested by the subscriber or user, or for the sole purpose of carrying out the transmission of a communication over an electronic communications network.
Preferences
The technical storage or access is necessary for the legitimate purpose of storing preferences that are not requested by the subscriber or user.
Statistics
The technical storage or access that is used exclusively for statistical purposes.The technical storage or access that is used exclusively for anonymous statistical purposes. Without a subpoena, voluntary compliance on the part of your Internet Service Provider, or additional records from a third party, information stored or retrieved for this purpose alone cannot usually be used to identify you.
Marketing
The technical storage or access is required to create user profiles to send advertising, or to track the user on a website or across several websites for similar marketing purposes.