【Rust日报】2022-09-09 攻击 Firecracker

2022-11-28 15:05:59 浏览数 (1)

攻击 Firecracker

来自 Grapl 的博客文章。在 Grapl,我们相信为了构建最好的防御系统,我们需要深入了解攻击者的行为。作为该目标的一部分,我们正在投资于进攻性安全研究。随时关注我们的博客,了解有关高风险漏洞、利用和高级威胁策略的新研究。

这篇博客文章介绍了如何攻击 Firecracker 中的漏洞,Firecracker 是一种用 Rust 编程语言编写的开源微型虚拟机 (microVM) 监视器。它是为在 AWS Lambda 中使用而开发的,这是一种无服务器软件即服务 (SaaS) 应用程序托管服务。Firecracker 也用于 AWS 的类似 Fargate 服务,该服务提供了一种运行容器的方法,而无需管理服务器以进行容器编排。由于多租户引入的风险,Firecracker 在设计时具有安全意识。

更多请看原文:https://www.graplsecurity.com/post/attacking-firecracker

由 tokio 运行时引起的奇怪的内存泄漏

这是 Reddit 上的一个讨论,发起者在代码中代码偶尔会在内存中删除并创建巨大的对象,并且发现它会有泄漏内存的现象。作者设法创建了一个具有类似内存问题的简单程序,如下:

代码语言:javascript复制
use std::sync::Arc;
use std::time::Duration;
use tokio::sync::Mutex;

pub struct Object {
    pub a: Vec<u32>,
    pub b: Vec<u32>,
    pub c: u32,
    pub d: u32,
    pub e: u32,
    pub f: Option<u128>
}

#[allow(unused)]
pub struct ObjectHolder {
    objects: Vec<Arc<Object>>
}

impl ObjectHolder {
    pub fn new() -> ObjectHolder {
        let mut res = vec![];
        for _ in 0..10_000_000 {
            res.push(Arc::new(Object {
                a: vec![12123, 123123, 12123, 12124, 1231512],
                b: vec![12423, 234, 2342],
                c: 423423,
                d: 123123,
                e: 12312,
                f: Some(392932)
            }))
        }
        return ObjectHolder {
            objects: res
        }
    }
}

pub struct Main {
    holder: Arc<Mutex<ObjectHolder>>
}

impl Main {
    pub fn new() -> Arc<Main> {
        return Arc::new(Main {
            holder: Arc::new(Mutex::new(ObjectHolder::new()))
        })
    }

    pub async fn build_objects(&self) {
        let mut holder = self.holder.lock().await;
        *holder = ObjectHolder::new();
        println!("BUILT NEW OBJECTS");
    }
}

#[tokio::main]
async fn main() {

    let main = Main::new();

    let cnt_iter = 100;

    tokio::spawn(async move {
        for _ in 0..cnt_iter {
            println!("STARTIGN NEW CYCLE");
            main.build_objects().await;

            (0..100).for_each(|_| {
                tokio::spawn(async move {
                    return Some(0)
                });
            });

            println!("WAITING 10 SECONDS");
            tokio::time::sleep(Duration::from_secs(10)).await;
        }
    }).await.unwrap();
}

参与讨论请看:https://www.reddit.com/r/rust/comments/x9bq8k/bizarre_memory_leak_caused_by_tokio_runtime/

serde-numpy 项目

serde-numpy 是一个用于将 JSON 直接反序列化为 numpy 数组的库,主要使用 rust 实现。

项目地址:https://github.com/wnorcbrown/serde-numpy

From 日报小组 @Jancd

0 人点赞